国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

jQuery中noconflict函數的實現原理分解

2019-11-20 13:14:51
字體:
來源:轉載
供稿:網友

jQuery中,noconflict是用來防止變量沖突,用來釋放變量控制權的一個重要方法。我們知道,jQuery中對外提供有兩個全局變量,$和jQuery,雖然jQuery只產生了兩個全局變量,極少情況下才會出現沖突,但是如果網頁中如果包涵較多的類庫,有自定義$或jQuery全局變量的存在時,就產生沖突。

jQuery提供的noconflict函數很好的解決了變量沖突問題,無論是$或者jQuery沖突都可以解決,接下來我們就來分析一下jQuery的沖突處理。

先來看一下jQuery源碼中noconflict的實現:

(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擴展靜態屬性的方法,這里可以看成直接在jQuery上附加noConflict方法。在匿名函數的內部,分別定義內部變量_jQuery和_$用來存儲window.jQuery和window.$, 這么做的用作在于用內部變量保存jQuery運行之前這兩個全局變量的狀態, 以便在后面的防沖突操作中還原這兩個變量。noConflict可處理$和jQuery這兩個變量沖突的情況,默認處理$,傳入一個true參數,則處理jQuery沖突的情況。
window.$ === jQuery用來判斷全局變量是否等于jQuery,如果等于,則重新還原全局變量$為jQuery運行之前的變量(存儲在內部變量 _$ 中);deep && window.jQuery === jQuery 當開啟深度沖突處理并且全局變量jQuery等于內部jQuery,則把全局jQuery還原成之前的狀況。判斷window.$ === jQuery和window.jQuery=jQuery的意義在于保護已經定義的變量不被重寫,如下面的代碼:

//引入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庫內部的jQuery構造函數, 像使用$一樣盡情使用它吧!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 苏尼特左旗| 西华县| 郑州市| 盈江县| 易门县| 灵武市| 清原| 平安县| 醴陵市| 英吉沙县| 正蓝旗| 阳原县| 合水县| 天津市| 花莲县| 浦县| 牡丹江市| 平塘县| 兴山县| 肥乡县| 昌都县| 大庆市| 大名县| 上犹县| 元江| 克什克腾旗| 阿荣旗| 武陟县| 霍城县| 新昌县| 新泰市| 社旗县| 西青区| 衡阳县| 惠州市| 嘉定区| 武定县| 沅陵县| 苍溪县| 河曲县| 宁阳县|