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