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 當(dāng)開啟深度沖突處理并且全局變量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ù), 像使用$一樣盡情使用它吧!
相關(guān)文章
jquery通過擴展select控件實現(xiàn)支持enter或focus選擇的方法
這篇文章主要介紹了jquery通過擴展select控件實現(xiàn)支持enter或focus選擇的方法,通過jQuery針對select空間增加enter及focus選擇功能分析了jQuery擴展的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2015-11-11jQuery選擇器_動力節(jié)點Java學(xué)院整理
選擇器是jQuery的核心,一個選擇器寫出來類似$('#dom-id')。下面給大家分享jQuery選擇器的相關(guān)知識,感興趣的朋友一起看看吧2017-07-07jquery1.5.1中根據(jù)元素ID獲取元素對象的代碼
盡管聽說jquery的大名幾年了,但是一直沒有使用過。這兩天想在項目中使用被一些小細節(jié)折騰的夠嗆,看來jquery沒有傳說中的那么好學(xué)。2011-04-04利用JQuery動畫制作滑動菜單項效果實現(xiàn)步驟及代碼
滑動菜單項效果,聽起來就是很時尚的一個效果,不過實現(xiàn)起來有些麻煩,還好有本文的出現(xiàn),可以幫助你解決這個困惑,熱愛特效的你可不要錯過了哈,好了話不多說切入正文2013-02-02jquery二級導(dǎo)航內(nèi)容均分的原理及實現(xiàn)
頭部導(dǎo)航二級導(dǎo)航有些內(nèi)容太長,一列的話太過難看,就要分成兩列,要做到按塊盡量均分,排列順序沒有限制2013-08-08