Полезность расширения ядра jQuery

#jquery #core #overriding #extending

#jquery #Ядро #переопределение #расширение

Вопрос:

Я обнаружил метод расширения основной функции инициализации 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:

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

jQuery.sub()

Это позволяет расширять jQuery локально без «повреждения» или «изменения» глобального объекта jQuery.

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

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

Комментарии:

1. Спасибо за информацию, это очень интересно — я никогда не знал о функции sub (). К вашему сведению, документация по нему находится здесь: api.jquery.com/jQuery.sub