Функция jQuery.fn.init
- это та, которая выполняется при вызове jQuery(".some-selector")
или $(".some-selector")
. Вы можете увидеть это в этом фрагменте из jquery.js :
jQuery = window.jQuery = window.$ = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context );
}
Таким образом, на самом деле, упомянутая вами строка имеет решающее значение для того, чтобы jQuery позволял добавлять функциональность к объектам jQuery, как внутри самого jQuery, так и из плагинов. Это строка:
jQuery.fn.init.prototype = jQuery.fn;
Назначив jQuery.fn
в качестве прототипа этой функции (и поскольку первый фрагмент использует 'new' для обработки jQuery.fn.init в качестве конструктора), это означает, что функциональность, добавленная через jQuery.fn.whatever
, сразу же доступна на объекты, возвращаемые всеми вызовами jQuery.
Так, например, простой плагин jQuery может быть создан и использован следующим образом:
jQuery.fn.foo = function () { alert("foo!"); };
jQuery(".some-selector").foo();
Когда вы объявляете 'jQuery.fn.foo' в первой строке, вы фактически добавляете эту функцию к прототипу всех объектов jQuery, созданных с помощью функции jQuery, такой же, как функция во второй строке. Это позволяет вам просто вызвать 'foo ()' для результатов функции jQuery и вызвать ваши функции плагина.
Короче говоря, написание плагинов jQuery было бы более многословным и могло бы привести к поломке в будущем, если бы детали реализации изменились, если бы эта строка не существовала в jQuery.