Написание методов статического использования jquery

Я понимаю концепцию расширения jquery.fn, чтобы разместить ваши пользовательские функции в цепочке прототипов объекта jquery, но в моем случае некоторые из моих utils не нужно прикреплять к селектору. Я в основном ищу статический метод. Поэтому я хотел знать о любых ловушках написания статических методов непосредственно на объекте jquery в качестве методов использования.

Пример:

jquery.myMethod = function(arg){
   ......
} 

$.myMethod("blabla");

Спасибо

Ответы

Ответ 1

Как вы, кажется, понимаете, неплохо было бы не сбрасывать все ваши служебные функции в глобальное пространство имен. Чем меньше вы можете влиять на глобальное пространство имен, тем лучше. Если у вас уже есть jQuery, то ваш выбор места их размещения:

  • В качестве новых методов для объекта jQuery: jQuery.myUtil1(), jQuery.myUtil2().
  • Как новые методы под одним объектом объекта jQuery: jQuery.jfUtils.myUtil1(), jQuery.jfUtils.myUtil2().
  • Как новые методы для одного нового глобального объекта (ничего общего с jQuery): jfUtils.myUtil1(), jfUtils.myUtil2().

Вариант 2) мне лучше, чем вариант 1), потому что вы уменьшаете вероятность столкновения с другими функциями jQuery, хотя вы добавляете дополнительный поиск для каждого вызова функции.

Вариант 3) представляется мне совершенно приемлемым, поскольку он добавляет только один новый элемент в глобальное пространство имен, поэтому, если вы сделаете его имя уникальным, вы должны быть в порядке.

Итак, я думаю, вы могли бы пойти либо с вариантом 2), либо с вариантом 3). Вариант 2) может быть немного более безопасным, потому что вы знаете общую степень того, что находится в этом пространстве имен, но они могут работать.

Ответ 2

Не следует добавлять статические методы в jQuery. Вы ничего не получаете, пытаясь. Точка расширения jQuery заключается в том, что объекты jQuery, найденные с строками запроса, будут иметь на них методы. Вы просто создаете глобальную функцию, поэтому просто создайте новый объект верхнего уровня для хранения ваших функций.