2010-02-22 5 views

ответ

17

Это соглашение используется при написании плагинов для обеспечения не confilict с другими библиотеками Javascript, используя $ нотации, в то время как обеспечение плагин автор все еще может использовать этот notataion:

(function($){ 
    ... 
})(jQuery); 

автор объявляющий анонимную функцию с одним параметром ($), то сразу же назвав его и передавая объект Jquery к нему. Это гарантирует, что функция вызывается и что все в ней определено.

Большее обозначение может быть:

function MyDefs($){ 
    ... 
} 
MyDefs(jQuery); 

Хотя что бы создать переменную MyDefs в глобальном пространстве имен. Анонимный шаблон функции оставляет глобальное пространство имен пустым, избегая конфликтов.

+0

спасибо, теперь я понял. Я хотел бы назвать метод моего плагина из внешнего кода. Как я могу сделать его общедоступным? Есть ли способ объявить интерфейс? – aneuryzm

+0

ОК, я нашел ответ здесь: http://stackoverflow.com/questions/1204822/jquery-plugin-public-method-function – aneuryzm

+0

Отличное объяснение Джеймс. Однако, что произойдет, если несколько плагинов сделают «$ .fn.columnize ...» - разве это не вызвало бы конфликт? Это то, что я хотел бы изучить некоторое время, но, поскольку я еще не написал плагин, для этого недостаточно срочно. – belugabob

2

Он объявляет функцию columnize как плагин jQuery, позволяющий использовать его для таких элементов, как этот $('.someSelector').columnize(). Вы можете узнать больше о plugin authoring here.

0

Я только что нашел это ... это прокси-шаблон?

Proxy Pattern

Сочетание выше знания дает вам, как разработчику JavaScript довольно много энергии. Один из способов объединить это реализовать шаблон прокси в JavaScript, что позволяет основы аспектно-ориентированного программирования (АОП):

(function() { 
    // log all calls to setArray 
    var proxied = jQuery.fn.setArray; 
    jQuery.fn.setArray = function() { 
    console.log(this, arguments); 
    return proxied.apply(this, arguments); 
    }; 
})(); 

выше оборачивает свой код в функции, чтобы скрыть «проксированном» -переменную. Он сохраняет метод setArray jQuery в закрытии и перезаписывает его. Затем прокси регистрирует все вызовы метода и делегирует вызов оригиналу. Использование apply (это, аргументы) гарантирует, что вызывающий абонент не сможет заметить разницу между исходным и прокси-методом.

1

Это, вероятно, расширение JQuery, которые в основном проходят (JQuery) в конце как

(function($){ 
    //$ is jQuery here 

    //added columnize function to existing jQuery object 
    $.fn.columnize = function(options) { 

    } 

})(jQuery); 
+0

Да, это плагин jQuery. Я нашел, что это тот же синтаксис прокси-шаблонов. Кстати, мне нужно вызвать функцию внутри плагина. Когда я пытаюсь вызвать его, я получаю сообщение об ошибке (функция не определена), хотя она действительно работает в браузере. Как я могу сделать функцию видимой? В интерфейсе плагина? спасибо – aneuryzm

+0

Могу я знать, как вы называете эту функцию? могут быть отправлены некоторые коды? – YOU

0

Не путайте $. Фактически, $ является допустимым именем переменной в JavaScript (как и все переменные, содержащие $, source (PDF)).

Таким образом, первая линия может быть перефразировать

(function (someVariable) { 

, которые могли бы выглядеть более распространенным явлением. В остальном, да, это прокси-шаблон, и ответ Джеймса Уайзмена объясняет, что происходит.

0

function($) {...} определяет анонимную функцию с формальным параметром с именем $. $.fn относится к свойству с именем fn объекта, на который ссылается переменная $.

Смежные вопросы