Полезность расширения ядра JQuery - PullRequest
2 голосов
/ 30 апреля 2011

Я обнаружил метод расширения основной функции инициализации jQuery (которая вызывается каждый раз, когда вы используете функцию $ () или jQuery ()). Это невозможно при использовании обычного шаблона прокси, но следующий код заставляет его работать:

var origInit = jQuery.fn.init;

jQuery.fn.init = function(selector, context, rootjQuery) {
    if (some condition) {
        //custom code here, possibly returning some other jQuery object than
        //what jQuery would normally return
    }
    return origInit.call(jQuery.fn, selector, context, rootjQuery);
}

У меня вопрос, где это может быть полезно, так как я осознал, что мое первоначальное намерение использовать его для кэширования селекторов было проблематичным (поскольку это могло повлиять на поведение других плагинов - в итоге я использовал отдельную функцию для кэширования).

Так что я решил поделиться этим методом, и мне также любопытно услышать другие идеи о его возможном использовании. Я подумал, что, возможно, его можно будет использовать для поддержки пользовательских селекторов, хотя я не уверен, когда именно это потребуется, поскольку jQuery уже предлагает множество селекторов.

1 Ответ

2 голосов
/ 30 апреля 2011

Вы обнаружите, что jQuery имеет метод, построенный вокруг этой концепции.

jQuery.sub()

Это позволяет вам расширять jQuery локально, без "разрушения" или "изменение "глобального объекта jQuery.

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

Существует множество способов изменить методы jQuery или конструктор, начиная от записи в журнал до внедрения пользовательской логики, такой как запись GUID в объекты jQuery.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...