Что означает следующий синтаксис?Что означает синтаксис JavaScript/jQuery?
(function($){
$.fn.columnize = function(options) {
...
Что такое function($)
?
Что такое $.fn. …
?
Что означает следующий синтаксис?Что означает синтаксис JavaScript/jQuery?
(function($){
$.fn.columnize = function(options) {
...
Что такое function($)
?
Что такое $.fn. …
?
Это соглашение используется при написании плагинов для обеспечения не confilict с другими библиотеками Javascript, используя $ нотации, в то время как обеспечение плагин автор все еще может использовать этот notataion:
(function($){
...
})(jQuery);
автор объявляющий анонимную функцию с одним параметром ($), то сразу же назвав его и передавая объект Jquery к нему. Это гарантирует, что функция вызывается и что все в ней определено.
Большее обозначение может быть:
function MyDefs($){
...
}
MyDefs(jQuery);
Хотя что бы создать переменную MyDefs
в глобальном пространстве имен. Анонимный шаблон функции оставляет глобальное пространство имен пустым, избегая конфликтов.
Он объявляет функцию columnize
как плагин jQuery, позволяющий использовать его для таких элементов, как этот $('.someSelector').columnize()
. Вы можете узнать больше о plugin authoring here.
Я только что нашел это ... это прокси-шаблон?
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 (это, аргументы) гарантирует, что вызывающий абонент не сможет заметить разницу между исходным и прокси-методом.
Это, вероятно, расширение JQuery, которые в основном проходят (JQuery) в конце как
(function($){
//$ is jQuery here
//added columnize function to existing jQuery object
$.fn.columnize = function(options) {
}
})(jQuery);
Да, это плагин jQuery. Я нашел, что это тот же синтаксис прокси-шаблонов. Кстати, мне нужно вызвать функцию внутри плагина. Когда я пытаюсь вызвать его, я получаю сообщение об ошибке (функция не определена), хотя она действительно работает в браузере. Как я могу сделать функцию видимой? В интерфейсе плагина? спасибо – aneuryzm
Могу я знать, как вы называете эту функцию? могут быть отправлены некоторые коды? – YOU
Не путайте $
. Фактически, $
является допустимым именем переменной в JavaScript (как и все переменные, содержащие $
, source (PDF)).
Таким образом, первая линия может быть перефразировать
(function (someVariable) {
, которые могли бы выглядеть более распространенным явлением. В остальном, да, это прокси-шаблон, и ответ Джеймса Уайзмена объясняет, что происходит.
function($) {...}
определяет анонимную функцию с формальным параметром с именем $
. $.fn
относится к свойству с именем fn
объекта, на который ссылается переменная $
.
спасибо, теперь я понял. Я хотел бы назвать метод моего плагина из внешнего кода. Как я могу сделать его общедоступным? Есть ли способ объявить интерфейс? – aneuryzm
ОК, я нашел ответ здесь: http://stackoverflow.com/questions/1204822/jquery-plugin-public-method-function – aneuryzm
Отличное объяснение Джеймс. Однако, что произойдет, если несколько плагинов сделают «$ .fn.columnize ...» - разве это не вызвало бы конфликт? Это то, что я хотел бы изучить некоторое время, но, поскольку я еще не написал плагин, для этого недостаточно срочно. – belugabob