實現方式很簡單:在初始化的時候,記錄當前全局中jQuery和$兩個變量的的值,用_jQuery和_$分別存放,調用noConflict方法時,使用_jQuery和_$分別恢復對應的值,而且返回jQuery對象。spa
// 初始化jQuery對象時,調用邏輯以下:
// 1. 記錄全局中的jQuery和$變量(此時這兩個變量指向生成jQuery對象以前的全局中的變量)
var // Map over jQuery in case of overwrite _jQuery = window.jQuery, // Map over the $ in case of overwrite _$ = window.$;
// 2. 初始化jQuery上的noConflict方法,deep能夠傳入一個boolean值,若是傳入deep jQuery.noConflict = function(deep) {
// 若是此時全局中的$變量指向jQuery,釋放全局$變量 if (window.$ === jQuery) { window.$ = _$; } // 若是deep爲true,而且jQuery指向jQuery,釋放全局jQuery變量 if (deep && window.jQuery === jQuery) { window.jQuery = _jQuery; } // 返回jQuery對象 return jQuery; }; // 將jQuery暴露到全局(noGlobal在初始化時傳入) if (!noGlobal) { window.jQuery = window.$ = jQuery; }