/ / как да персонализирате изграждането на javascript API въз основа на Jquery и някои въпроси относно синтаксиса, използван в Jquery - javascript, jquery, api, пространства от имена

как да създадете javascript API на базата на Jquery и някои въпроси относно синтаксиса, използван в Jquery - javascript, jquery, api, namespaces

Идвам тук с доста въпроси, така че да започнем:

Искам да знам някои неща за синтаксиса, използван за създаване на 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

Отговори:

2 за отговор № 1

Въпрос 1 и Въпрос 2 всъщност са свързани. Това, което правят, е да дефинират функция с (function(params){...}) bit и го изпълнявате веднага с (window) бит, преминавайки в прозорец като параметър. Изглежда доста странно, но това е чудесен начин да се уверите, че в крайна сметка няма да замърсите глобалното пространство на имената. Ако определите функцията си като function foo(){...}, означава, че foo е функция в глобалното пространство от имена (прозореца) всеки и всеки може да извика вашата функция. Още по-лошо, това означава, че никой друг не може да дефинира a function foo в глобален, без да потъпква цялата ви функция foo. Лошите неща се случват, когато това се случи :-) 188663 има повече информация за този модел.

Трети въпрос, jQuery го прави добре. Какво правят с

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

означава, че можете да се обадите на jQuery или $ и той "просто съществува", това е начин в глобалния обхват. Вероятно сте след модула или единичния модел - 1479319 има някои весели добри отговори в това отношение


1 за отговор № 2

1) Това създава затваряне, така че всичко вътре да е локално за това затваряне, само това, което авторите възнамеряват да изложи и в глобалното пространство на имената.

2) window изразът е предаване на препратка към window обект в това затваряне, това е първият параметър на function( window, undefined ) { отгоре, това води и до незабавното му извикване.


1 за отговор № 3

Това, което гледате, се нарича АнонименФункция. Анонимните функции могат да се предават точно като нормалните променливи. Те също се изпълняват незабавно, след като бъдат декларирани. Това е доста промяна в парадигмата в разбирането на тази концепция. Сигурен съм, че има някои други обяснения тук на Stackoverflow, които могат да ги обяснят.

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

Така във втория ви пример:

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

})(window);

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