LINUX.ORG.RU

История изменений

Исправление wandrien, (текущая версия) :

А в проектах с jQuery обычно каша и мешанина. Там нет обычно никаких компонентов, есть только какие-то скрипты с кодом в виде лапши, никаким переиспользованием чего-либо не пахнет, стандартов разработки тоже нет. Это не фреймворк же, а библиотека - и все крутят её как хотят.

Ну у них просто ниши разные, jquery это мешок утилит, а архитектура проекта должна быть задача чем-то другим. Если вместо архитектуры каша, то упс…

Я где-то уже здесь на форуме упоминал, как несколько месяцев назад чистил дубли кода, когда в 5-ти местах одна большая форма на ExtJS была просто копи-пастом вставлена в другую большую форму на ExtJS, а потом всё это еще было разбавлено мелкими правками. (И подобного там еще много осталось, не везде есть возможность и целесообразность править.) Но к чести ExtJS, действительно, такой код можно отрефакторить за разумное время, а если бы это был голый jquery, то можно вешаться.

В общем, jQuery для сложных интерфейсов, на мой взгляд, не особо годится. Я уж молчу о том, что сейчас её в принципе нет смысла где-либо использовать, ведь все её функции поддерживаются браузерами из коробки.

Они как бы «поддерживаются», а как бы и нет. Потому что для паритета фич приходится писать вот такие костыли:

/* Refer https://ourcodeworld.com/articles/read/317/how-to-check-if-a-javascript-promise-has-been-fulfilled-rejected-or-resolved for details.
*/

/**
 * This function allow you to modify a JS Promise by adding some status properties.
 * Based on: http://stackoverflow.com/questions/21485545/is-there-a-way-to-tell-if-an-es6-promise-is-fulfilled-rejected-resolved
 * But modified according to the specs of promises : https://promisesaplus.com/
 */

function makeQuerablePromise(promise) {
    // Don't modify any promise that has been already modified.
    if (promise.isFulfilled) return promise;

    // Set initial state
    var isPending = true;
    var isRejected = false;
    var isFulfilled = false;

    // Observe the promise, saving the fulfillment in a closure scope.
    var result = promise.then(
        function(v) {
            isFulfilled = true;
            isPending = false;
            return v;
        },
        function(e) {
            isRejected = true;
            isPending = false;
            throw e;
        }
    );

    result.isFulfilled = function() { return isFulfilled; };
    result.isPending = function() { return isPending; };
    result.isRejected = function() { return isRejected; };
    return result;
}

И еще вот такие костыли:

class DeferredPromise {
    constructor() {
        this._promise = new Promise((resolve, reject) => {
            // assign the resolve and reject functions to `this`
            // making them usable on the class instance
            this.resolve = resolve;
            this.reject = reject;
        });
        // bind `then` and `catch` to implement the same interface as Promise
        this.then = this._promise.then.bind(this._promise);
        this.catch = this._promise.catch.bind(this._promise);
        this[Symbol.toStringTag] = 'Promise';
    }
}

И даже такие:

var filterUniq = function(arrArg) {
    return arrArg.filter(function(elem, pos,arr) {
        return arr.indexOf(elem) == pos;
    });
};

Исходная версия wandrien, :

А в проектах с jQuery обычно каша и мешанина. Там нет обычно никаких компонентов, есть только какие-то скрипты с кодом в виде лапши, никаким переиспользованием чего-либо не пахнет, стандартов разработки тоже нет. Это не фреймворк же, а библиотека - и все крутят её как хотят.

Ну у них просто ниши разные, jquery это мешок утилит, а архитектура проекта должна быть задача чем-то другим. Если вместо архитектуры каша, то упс…

Я где-то уже здесь на уфоруме упоминал, как месколько месяцев назад чистил дубли кода, когда в 5-ти местах одна большая форма на ExtJS была просто копи-пастом вставлена в другую большую форму на ExtJS, а потом всё это еще было разбавлено мелкими правками. (И подобного там еще много осталось, не везде есть возможность и целесообразность править.) Но к чести ExtJS, действительно, такой код можно отрефакторить за разумное время, а если бы это был голый jquery, то можно вешаться.

В общем, jQuery для сложных интерфейсов, на мой взгляд, не особо годится. Я уж молчу о том, что сейчас её в принципе нет смысла где-либо использовать, ведь все её функции поддерживаются браузерами из коробки.

Они как бы «поддерживаются», а как бы и нет. Потому что для паритета фич приходится писать вот такие костыли:

/* Refer https://ourcodeworld.com/articles/read/317/how-to-check-if-a-javascript-promise-has-been-fulfilled-rejected-or-resolved for details.
*/

/**
 * This function allow you to modify a JS Promise by adding some status properties.
 * Based on: http://stackoverflow.com/questions/21485545/is-there-a-way-to-tell-if-an-es6-promise-is-fulfilled-rejected-resolved
 * But modified according to the specs of promises : https://promisesaplus.com/
 */

function makeQuerablePromise(promise) {
    // Don't modify any promise that has been already modified.
    if (promise.isFulfilled) return promise;

    // Set initial state
    var isPending = true;
    var isRejected = false;
    var isFulfilled = false;

    // Observe the promise, saving the fulfillment in a closure scope.
    var result = promise.then(
        function(v) {
            isFulfilled = true;
            isPending = false;
            return v;
        },
        function(e) {
            isRejected = true;
            isPending = false;
            throw e;
        }
    );

    result.isFulfilled = function() { return isFulfilled; };
    result.isPending = function() { return isPending; };
    result.isRejected = function() { return isRejected; };
    return result;
}

И еще вот такие костыли:

class DeferredPromise {
    constructor() {
        this._promise = new Promise((resolve, reject) => {
            // assign the resolve and reject functions to `this`
            // making them usable on the class instance
            this.resolve = resolve;
            this.reject = reject;
        });
        // bind `then` and `catch` to implement the same interface as Promise
        this.then = this._promise.then.bind(this._promise);
        this.catch = this._promise.catch.bind(this._promise);
        this[Symbol.toStringTag] = 'Promise';
    }
}

И даже такие:

var filterUniq = function(arrArg) {
    return arrArg.filter(function(elem, pos,arr) {
        return arr.indexOf(elem) == pos;
    });
};