Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Шаблон для создание плагинов (https://javascript.ru/forum/jquery/29807-shablon-dlya-sozdanie-plaginov.html)

W1nD 12.07.2012 13:29

Шаблон для создание плагинов
 
http://stefangabos.ro/jquery/jquery-...ate-revisited/ Вот ссылка на шаьблон по созданию плагинов для jQuery. У меня возник вопрос.
1) Почему мы добавляем pluginname как метод jQuery?
2) Потом почему мы добавляем pluginname как $.fn
Зачем эти два обьявления, если бы можно было просто обьявить pluginname как функцию jQuery

zlodeeev 12.07.2012 13:58

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

Источник

W1nD 12.07.2012 14:09

Цитата:

Сообщение от zlodeeev (Сообщение 188281)
Если нужно написать плагин, который будет работать только с выбранными объектами, то нужно его создавать в jQuery.fn, а если нам неважно какие элементы страницы были выбраны, то лучше создавать функцию через jQuery.

Источник

Все доступно написано и понятно. Только вопрос в том, почему и первый и второй вариант одновременно используються в данном шаблоне?

zlodeeev 12.07.2012 14:20

fn — это короткая ссылка на jQuery.prototype, потому можно писать:
jQuery.fn.plugin = function () {
    // Here is my plugin
    // this здесь ссылается на jquery-объект, от которого вызван метод
};


И данный плагин появится во всех уже созданных и тех, что создадутся сущностях. Добавляя свойства напрямую в объект мы реализуем статические свойства:

jQuery.plugin = function () {
    // Here is my plugin
};


Таким образом, наилучший шаблон для небольших плагинов:

new function (document, $, undefined) {
    
    var privateMethod = function () {
        // private method, used for plugin
    };
    
    $.fn.myPlugin = function () {
        
    };
    
    // и, если нужен метод, не привязанный к dom-элементам:
    $.myPlugin = function () {
        
    };
    
}(document, jQuery);


А в твоём примере просто изменён порядок $.fn.plugin и $.plugin


Часовой пояс GMT +3, время: 23:48.