Я только начинаю с написания плагинов jQuery. Я написал три маленьких плагина, но я просто копировал строку во все мои плагины, даже не зная, что это значит. Может кто-нибудь рассказать мне немного больше об этом? Возможно, когда-нибудь объяснение пригодится при написании фреймворка :)
Что это делает? (Я знаю, что это как-то расширяет jQuery, но есть ли что-нибудь еще интересное об этом знать)
(function($) {
})(jQuery);
В чем разница между следующими двумя способами написания плагина:
Тип 1:
(function($) {
$.fn.jPluginName = {
},
$.fn.jPluginName.defaults = {
}
})(jQuery);
Тип 2:
(function($) {
$.jPluginName = {
}
})(jQuery);
Тип 3:
(function($){
//Attach this new method to jQuery
$.fn.extend({
var defaults = {
}
var options = $.extend(defaults, options);
//This is where you write your plugin's name
pluginname: function() {
//Iterate over the current set of matched elements
return this.each(function() {
//code to be inserted here
});
}
});
})(jQuery);
Я мог бы быть далеко отсюда и, возможно, все означают одно и то же. Я смущен. В некоторых случаях кажется , что это не работает в плагине, который я писал с использованием Type 1. Пока что Type 3 кажется мне наиболее элегантным, но я хотел бы знать и о других.
javascript
jquery
легенда
источник
источник
(function($) { })(jQuery);
оборачивает код так , что$
этоjQuery
внутри , что закрытие, даже если$
что - то значит еще вне его, как правило , в результате$.noConflict()
, например. Это гарантирует, что ваш плагин работает, или нет$ === jQuery
:)(function($) { })(jQuery)
тебе сказали: «Я знаю, что это как-то расширяет jQuery [...]». Очевидно, вы не знаете, так как ваше утверждение на 100% ложно. Кстати, это может ввести в заблуждение будущих читателей. Взгляните на это: stackoverflow.com/a/32550649/1636522 .Ответы:
Во-первых, похожий блок кода
(function(){})()
- это просто функция, которая выполняется на месте. Давайте разберемся с этим немного.Строка 2 представляет собой простую функцию, заключенную в круглые скобки, чтобы сообщить среде выполнения, чтобы она возвращала функцию в родительскую область, после ее возврата функция выполняется с использованием строки 4, возможно, чтение этих шагов поможет
Вы можете видеть, что 1 является объявлением, 2 возвращает функцию, а 3 просто выполняет функцию.
Пример того, как это будет использоваться.
Что касается других вопросов о плагинах:
Тип 1: На самом деле это не плагин, это объект, передаваемый как функция, поскольку плагины, как правило, являются функциями.
Тип 2: Это снова не плагин, поскольку он не расширяет
$.fn
объект. Это просто расширение ядра jQuery, хотя результат тот же. Это если вы хотите добавить функции обхода, такие как toArray и так далее.Тип 3: Это лучший способ добавить плагин, расширенный прототип jQuery берет объект, содержащий имя и функцию вашего плагина, и добавляет его в библиотеку плагинов.
источник
( function(){} )
: что это такое? Могу ли я не просто написатьfunction(){}()
?На самом базовом уровне что-то в форме
(function(){...})()
- это литерал функции, который выполняется немедленно. Это означает, что вы определили функцию и вызываете ее немедленно.Эта форма полезна для сокрытия и инкапсуляции информации, поскольку все, что вы определяете внутри этой функции, остается локальным для этой функции и недоступно для внешнего мира (если вы специально не предоставляете ее - обычно через литерал возвращаемого объекта).
Разновидностью этой базовой формы является то, что вы видите в плагинах jQuery (или в этом шаблоне модуля в целом). Следовательно:
Это означает, что вы передаете ссылку на реальный
jQuery
объект, но это известно как$
область действия литерала функции.Тип 1 на самом деле не плагин. Вы просто присваиваете литерал объекта
jQuery.fn
. Обычно вы назначаете функцию, такjQuery.fn
как плагины - это обычно просто функции.Тип 2 похож на Тип 1; вы на самом деле не создаете плагин здесь. Вы просто добавляете объектный литерал в
jQuery.fn
.Тип 3 - это плагин, но это не лучший и не самый простой способ его создания.
Чтобы понять больше об этом, взгляните на этот похожий вопрос и ответ . Кроме того, на этой странице подробно рассматриваются авторские плагины.
источник
Небольшая помощь:
источник
Просто небольшое дополнение к объяснению
Эта структура
(function() {})();
называется IIFE (выражение вызова немедленно вызванной функции), она будет выполнена немедленно, когда интерпретатор достигнет этой строки. Итак, когда вы пишете эти строки:это означает, что интерпретатор немедленно вызовет функцию и передаст ее
jQuery
в качестве параметра, который будет использоваться внутри функции как$
.источник
На самом деле этот пример помог мне понять, что это
(function($) {})(jQuery);
значит.Учти это:
А теперь рассмотрим это:
jQuery
переменная, содержащая объект jQuery$
имя переменной , как и любой другой (a
,$b
, иa$b
т.д.) , и это не имеет никакого особого значения , как в PHP.Зная, что мы можем еще раз взглянуть на наш пример:
источник
Тип 3, для того, чтобы работать, должен был выглядеть так:
Я не уверен, почему кто-то использует расширение по сравнению с простой установкой свойства в прототипе jQuery, оно делает то же самое только в большем количестве операций и большем количестве беспорядка.
источник