Подтвердить что ты не робот

Как jQuery достигает $a alias для функции jQuery?

У меня есть небольшая проблема, обертывая мою голову вокруг знака $, являющегося псевдонимом функции jQuery, особенно в плагине. Можете ли вы объяснить, как jQuery достигает этого псевдонимов: как он определяет '$' как псевдоним для функции jQuery? Это первый вопрос.

Во-вторых, можете ли вы объяснить, как/почему следующий код работает для сопоставления '$' функции jQuery в определении плагина и почему, если вы этого не сделаете, ваш плагин может столкнуться с другими библиотеками, которые могут использовать доллар знак?

(function( $ ){
    $.fn.myPlugin = function() {
        // Do your awesome plugin stuff here
    };
})(jQuery);
4b9b3361

Ответ 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.