jQuery имеет библиотеку функций, хранящуюся во внутреннем объекте с именем fn
. Это те, которые вы можете вызывать для каждого объекта jQuery.
Когда вы делаете $("div.someClass")
, вы получаете объект jQuery, содержащий все <div>
элементы этого класса. Теперь вы можете сделать $("div.someClass").each( someFunction )
, чтобы применить someFunction
к каждому из них. Это означает, что each()
является одной из функций, хранящихся в fn
(в данном случае встроенной).
Если вы расширяете (добавляете) внутренний объект fn
, то вы автоматически делаете доступной пользовательскую функцию с тем же синтаксисом. Предположим, у вас есть функция, которая записывает все элементы в консоль, которая называется log()
. Вы можете добавить эту функцию к $.fn
, а затем использовать ее как $("div.someClass").log()
.
Каждая функция, добавленная к объекту fn
, будет вызываться таким образом, что внутри тела функции, ключевое слово this
будет указывать на используемый вами объект jQuery.
Обычная практика - возвращать this
в конце пользовательской функции, чтобы цепочка методов не нарушалась: $("div.someClass").log().each( someFunction )
.
Существует несколько способов добавления функций к объекту $.fn
, некоторые из которых безопаснее других. Достаточно безопасно это сделать:
jQuery.fn.extend({
foo: function() {
this.each( function() { console.log(this.tagName); } );
return this;
}
})