jQuery中noconflict函數(shù)的實現(xiàn)原理分解
jQuery中,noconflict是用來防止變量沖突,用來釋放變量控制權(quán)的一個重要方法。我們知道,jQuery中對外提供有兩個全局變量,$和jQuery,雖然jQuery只產(chǎn)生了兩個全局變量,極少情況下才會出現(xiàn)沖突,但是如果網(wǎng)頁中如果包涵較多的類庫,有自定義$或jQuery全局變量的存在時,就產(chǎn)生沖突。
jQuery提供的noconflict函數(shù)很好的解決了變量沖突問題,無論是$或者jQuery沖突都可以解決,接下來我們就來分析一下jQuery的沖突處理。
先來看一下jQuery源碼中noconflict的實現(xiàn):
(function(window,undefined){
var
// Map over jQuery in case of overwrite
_jQuery = window.jQuery,
// Map over the $ in case of overwrite
_$ = window.$,
jQuery.extend({
noConflict: function( deep ){
if ( window.$ === jQuery ) {
window.$ = _$;
}
if ( deep && window.jQuery === jQuery ) {
window.jQuery = _jQuery;
}
return jQuery;
}
})
}(window)
在這里jQuery.extend是jQuery擴展靜態(tài)屬性的方法,這里可以看成直接在jQuery上附加noConflict方法。在匿名函數(shù)的內(nèi)部,分別定義內(nèi)部變量_jQuery和_$用來存儲window.jQuery和window.$, 這么做的用作在于用內(nèi)部變量保存jQuery運行之前這兩個全局變量的狀態(tài), 以便在后面的防沖突操作中還原這兩個變量。noConflict可處理$和jQuery這兩個變量沖突的情況,默認處理$,傳入一個true參數(shù),則處理jQuery沖突的情況。
window.$ === jQuery用來判斷全局變量是否等于jQuery,如果等于,則重新還原全局變量$為jQuery運行之前的變量(存儲在內(nèi)部變量 _$ 中);deep && window.jQuery === jQuery 當開啟深度沖突處理并且全局變量jQuery等于內(nèi)部jQuery,則把全局jQuery還原成之前的狀況。判斷window.$ === jQuery和window.jQuery=jQuery的意義在于保護已經(jīng)定義的變量不被重寫,如下面的代碼:
//引入jQuery庫 var $="String"; var jq=jQuery.noconflict(); var jQuery="This is a line"; var j=jq.noconflict(true); console.log($);//這里如果沒有window.$===jQuery這句判斷,那么$將會等于undefined而不是"String"。 console.log(jQuery); //同上,如果沒有判斷window.jQuery===jQuery,重新定義的jQuery就會被undefined覆蓋。
整個運行流程參加下圖:

noConflict返回的是jQuery庫內(nèi)部的jQuery構(gòu)造函數(shù), 像使用$一樣盡情使用它吧!
相關文章
得到jQuery detach()后節(jié)點中的某個值實現(xiàn)代碼
需要jQuery -detach 后的dom 結(jié)構(gòu)或某個值,如何獲取到呢?一直困惑著我們,不過本文將為大家解開疑惑,感興趣的朋友可以了解下,或許本文對你有所幫助2013-02-02
使用jquery/js獲取iframe父子級、同級獲取元素的方法
下面小編就為大家?guī)硪黄褂胘query/js獲取iframe父子級、同級獲取元素的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08
淺析JQuery獲取和設置Select選項的常用方法總結(jié)
本篇文章是對JQuery獲取和設置Select選項的一些常用方法進行了匯總介紹,有需要的朋友可以參考一下2013-07-07
jquery根據(jù)一個值來選中select下的option實例代碼
下面小編就為大家?guī)硪黄猨query根據(jù)一個值來選中select下的option實例代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08
淺談jQuery綁定事件會疊加的解決方法和心得總結(jié)
下面小編就為大家?guī)硪黄獪\談jQuery綁定事件會疊加的解決方法和心得總結(jié)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10
基于JavaScript如何實現(xiàn)ajax調(diào)用后臺定義的方法
由于ajax的獨特優(yōu)勢,使得它在當前大量網(wǎng)站得到了廣泛的應用,下面就介紹一下ajax如何調(diào)用后臺定義的函數(shù),對ajax調(diào)用后臺方法相關知識感興趣的朋友一起學習吧2015-12-12

