История изменений
Исправление 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;
});
};