Как сделать пользовательский Javascript API на основе Jquery и некоторые вопросы о синтаксисе, используемом в Jquery - PullRequest
3 голосов
/ 13 августа 2010

Я пришел сюда с кучей вопросов, поэтому давайте начнем:

Я хочу узнать кое-что о синтаксисе, используемом для создания jquery, так как я хочу научиться использовать его для себя.

Вопрос 1: Запуск библиотеки jQuery


(function( window, undefined ) {

// Define a local copy of jQuery
var jQuery = function( selector, context ) {
        // The jQuery object is actually just the init constructor 'enhanced'
        return new jQuery.fn.init( selector, context );
    },

    // Map over jQuery in case of overwrite
    _jQuery = window.jQuery, .......

Я хотел бы знать, что означает скобка перед функцией, подобной "(функция (окно ...«до сих пор я только что объявил свою функцию следующим образом:


function myFunc(myArg1,myArg2){
//stuff
}

Вопрос 2:

В конце библиотеки jquery я понимаю, что знак $ назначен в глобальной области видимости.так что мы можем использовать $ где угодно для селекторов, я не понимаю, что означает выражение «(окно);» в самом конце, и какой цели оно служит.


        };

});
// Expose jQuery to the global object
window.jQuery = window.$ = jQuery;

})(window);

Мой последний вопрос: как мне создать собственный глобально доступный объект javascript, с которым я могу использовать, скажем, "ds.functionName (Arg1)"; точно так же, как JQuery используется со знаком $

Спасибо: D

Ответы [ 3 ]

2 голосов
/ 13 августа 2010

Вопрос 1 и Вопрос 2 фактически связаны между собой.То, что они делают, - это определение функции с битом (function(params){...}) и немедленное ее выполнение с битом (window), передавая окно в качестве параметра.Это выглядит довольно странно, но это отличный способ убедиться, что вы не загрязните глобальное пространство имен.Если вы определяете свою функцию как function foo(){...}, это означает, что foo является функцией в глобальном пространстве имен (окне), каждый и каждый может вызвать вашу функцию.Хуже того, это означает, что никто другой не может определить function foo в глобальном, не растоптав всю вашу функцию foo.Плохие вещи случаются, когда это происходит :-) 188663 имеет больше информации об этом шаблоне.

Третий вопрос, jQuery делает это хорошо.То, что они делают с

// Expose jQuery to the global object
window.jQuery = window.$ = jQuery;

, означает, что вы можете вызывать jQuery или $, и он «просто существует», это выход в глобальную область видимости.Вы, вероятно, после модуля или шаблона синглтона - 1479319 имеет несколько хороших ответов в этом отношении

1 голос
/ 13 августа 2010

То, на что вы смотрите, называется анонимной функцией.Анонимные функции могут передаваться как обычные переменные.Они также выполняются сразу же после их объявления.Это довольно смена парадигмы в понимании этой концепции.Я уверен, что в Stackoverflow есть и другие объяснения, которые могут их объяснить.

(...your code...)(argument);

Итак, во втором примере:

});
// Expose jQuery to the global object
window.jQuery = window.$ = jQuery;

})(window);

аргумент window передается ванонимная функция, которая началась в примере 1

1 голос
/ 13 августа 2010

1) Это создает замыкание, так что все внутри является локальным для этого замыкания, только то, что авторы намерены раскрыть, и в глобальном пространстве имен.

2) Выражение window передает ссылку на объект window в это замыкание, это первый параметр function( window, undefined ) { вверх, это также вызывает немедленный вызов.

...