小結一下:
1.整個類庫定義在一匿名函數中,杜絕了全局變量的產生;
2.將undefined 作為缺失的參數傳遞,防止了undefined 變量的污染;
3.可以看出$(...) 實際上返回的是jQuery.fn.init 對象的實例,隨後將該對象的prototype 指向了jQuery.prototype (語句jQuery.fn.init.prototype = jQuery.fn),因此產生的實例共享著jQuery.prototype 裡的方法和屬性且實現了鏈式編程的操作;
4.最後通過window.jQuery = window.$ = jQuery 將jQuery 與$ 導出為全局變量。
代碼如下:
(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);