jQuery 作為當(dāng)今最優(yōu)秀的js 類庫(kù)之一,必須是要花時(shí)間好好學(xué)習(xí)下的,今天正好蛋疼,讀了里面一些代碼,小結(jié)一下:
整個(gè)類庫(kù)定義在一匿名函數(shù)中,杜絕了全局變量的產(chǎn)生;
將undefined 作為缺失的參數(shù)傳遞,防止了undefined 變量的污染;
可以看出$(...) 實(shí)際上返回的是jQuery.fn.init 對(duì)象的實(shí)例,隨后將該對(duì)象的prototype 指向了jQuery.prototype (語(yǔ)句jQuery.fn.init.prototype = jQuery.fn),因此產(chǎn)生的實(shí)例共享著jQuery.prototype 里的方法和屬性且實(shí)現(xiàn)了鏈?zhǔn)骄幊痰牟僮鳎?
最后通過(guò)window.jQuery = window.$ = jQuery 將jQuery 與$ 導(dǎo)出為全局變量。
(function(window, undefined) {
// Define a local copy of jQuery
var jQuery = (function() {
var jQuery = function(selector, context) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init(selector, context/*, rootjQuery*/);
};
// ...
jQuery.fn = jQuery.prototype = {
constructor : jQuery,
init : function(selector, context, rootjQuery) {
// ...
}
// ...
};
// Give the init function the jQuery prototype for later instantiation
jQuery.fn.init.prototype = jQuery.fn;
// ...
// Expose jQuery to the global object
return jQuery;
})();
// ...
window.jQuery = window.$ = jQuery;
})(window);