Как jQuery достигает $a alias для функции jQuery?
У меня есть небольшая проблема, обертывая мою голову вокруг знака $, являющегося псевдонимом функции jQuery, особенно в плагине. Можете ли вы объяснить, как jQuery достигает этого псевдонимов: как он определяет '$' как псевдоним для функции jQuery? Это первый вопрос.
Во-вторых, можете ли вы объяснить, как/почему следующий код работает для сопоставления '$' функции jQuery в определении плагина и почему, если вы этого не сделаете, ваш плагин может столкнуться с другими библиотеками, которые могут использовать доллар знак?
(function( $ ){
$.fn.myPlugin = function() {
// Do your awesome plugin stuff here
};
})(jQuery);
Ответы
Ответ 1
Функция, как и любой объект в javascript, может быть назначена переменной. Эта переменная может иметь любое имя (которое следует правилам именования переменных JS). "$" удовлетворяет правилам именования, поэтому для краткости функция jQuery имеет псевдоним "$". Рассмотрим следующий пример:
var myFn = function() { alert('myFunc'); };
var $ = myFn;
$();
// alerts 'myFunc'
Ответ 2
Он просто объявляет переменную. См. здесь
jQuery сам является большой функцией самоиспускания. Это означает, что он объявляет функцию, а затем запускает ее. Внутри функции он объявляет локальный объект jQuery
, который является функцией.
Затем он в конце концов установит window.jQuery = window.$ = jQuery
Это устанавливает как window.jQuery
, так и window.$
локальный объект jQuery
. Мы можем установить глобальные переменные, сделав их свойствами объекта window
.
Теперь обе window.jQuery
и window.$
обе указывают на jQuery
, поскольку объекты передаются по ссылке.
var jQuery = (function() {
var jQuery = function( selector, context ) {
...
};
...
return (window.jQuery = window.$ = jQuery);
}());
он actaully дважды объявляет jQuery для небольшого коэффициента усиления эффективности, поскольку при поиске переменной ему не нужно смотреть вверх в дополнительную внешнюю функцию.
Вы можете использовать два назначения, например, потому что (var a = b) === b
Как и другие, упоминалось, что $
- это имя переменной legimate, а функции - объекты первого класса, поэтому мы можем рассматривать их как объекты и помогает сделать это возможным.
Ответ 3
Точный код (из jquery-1.4.1-vsdoc.js):
// Expose jQuery to the global object
window.jQuery = window.$ = jQuery;
Ответ 4
Объекты в JavaScript и, следовательно, jQuery, являются функциями. Вы можете определить свою собственную библиотеку JS, создав функцию с другими функциями, назначенными атрибутам этой единственной функции:
myLibrary = function() {
this.myLibraryFunction = function() {
...
};
};
new myLibrary().myLibraryFunction();
Аналогичным образом jQuery делает это с помощью функции с именем jQuery
вместо myLibrary
в приведенном выше примере.
Создание псевдонимов
Создание псевдонимов (или ссылок) возможно потому, что JavaScript позволяет передавать ссылки на функции без фактического вызова функции. Например:
new myLibrary().myLibraryFunction();
вызывает вашу библиотечную функцию, однако опуская круглые скобки позволяет справиться со ссылкой на эту функцию:
var f = new myLibrary().myLibraryFunction;
Затем вы можете вызвать ссылки, которые вы сохранили, а не оригинал, вернув скобки:
var f = new myLibrary().myLibraryFunction;
f();
Таким же образом jQuery может хранить ссылку на функцию jQuery
в другой переменной с именем $
:
var $ = jQuery;
Вы можете видеть, что в этом понятии используется в исходном коде jQuery в github.