Каждый кто сталкивался с написанием собственных плагинов на jQuery задавал вопрос — "В чем различие между объявлением функций через jQuery и jQuery.fn?".
Для того, чтобы ответить на поставленный вопрос приведу два примера.
Пример 1.
Пример 2.
Если запустить первый пример, то произойдет одно из двух событий — браузер выдаст ошибку (например, если у Вас установлен FireBug) либо не выдаст ничего. А если запустить второй пример, то на экране появится сообщение о количестве найденных элементов.
Прежде чем делать какие-либо выводы, приведу еще один пример:
В данном примере, будет выдано сообщение о количестве найденных объектов.
Думаю теперь у нас достаточно информации, чтобы сделать некоторые выводы:
Вывод 1: Если задать функцию через jQuery.fn, то она будет работать с элементами найденными через функцию $(). Контекст этой функции будет содержать выбранные элементы;
Вывод 2: Если задать функцию через jQuery, то к ней можно обратиться только через глобальный объект jQuery. В таком случае контекст функции будет указывать на глобальный объект window.
Таким образом, если нужно написать плагин, который будет работать только с выбранными объектами, то нужно его создавать в jQuery.fn, а если нам неважно какие элементы страницы были выбраны, то лучше создавать функцию черезjQuery.
Для того, чтобы ответить на поставленный вопрос приведу два примера.
Пример 1.
jQuery.sayHello = function() {
alert('Привет! Найдено ' + this.length + 'элементов' );
}
$('div').sayHello(); // ничего не происходит
Пример 2.
jQuery.fn.sayHello = function() {
alert('Привет! Найдено ' + this.length + 'элементов' );
}
$('div').sayHello(); // Выводит "Привет! найдено ХХ элементов", где ХХ - это количество найденных элементов на странице
Если запустить первый пример, то произойдет одно из двух событий — браузер выдаст ошибку (например, если у Вас установлен FireBug) либо не выдаст ничего. А если запустить второй пример, то на экране появится сообщение о количестве найденных элементов.
Прежде чем делать какие-либо выводы, приведу еще один пример:
jQuery.sayHello = function(elem) {
alert('Привет! Найдено ' + elem.length + 'элементов' );
}
jQuery.sayHello($('div'));
В данном примере, будет выдано сообщение о количестве найденных объектов.
Думаю теперь у нас достаточно информации, чтобы сделать некоторые выводы:
Вывод 1: Если задать функцию через jQuery.fn, то она будет работать с элементами найденными через функцию $(). Контекст этой функции будет содержать выбранные элементы;
Вывод 2: Если задать функцию через jQuery, то к ней можно обратиться только через глобальный объект jQuery. В таком случае контекст функции будет указывать на глобальный объект window.
Таким образом, если нужно написать плагин, который будет работать только с выбранными объектами, то нужно его создавать в jQuery.fn, а если нам неважно какие элементы страницы были выбраны, то лучше создавать функцию черезjQuery.
Комментариев нет :
Отправить комментарий