摘要:將或者的控制權(quán)讓給第一個(gè)實(shí)現(xiàn)它的那個(gè)庫(kù),確保不會(huì)與其它庫(kù)的對(duì)象發(fā)生沖突。
noConflict()
noConflict()將$或者jQuery的控制權(quán)讓給第一個(gè)實(shí)現(xiàn)它的那個(gè)庫(kù),確保jQuery不會(huì)與其它庫(kù)的$對(duì)象發(fā)生沖突。
jQuery中源碼如下:
var _jQuery = window.jQuery, _$ = window.$; jQuery.noConflict = function(deep){ if(window.$ === jQuery){ window.$ = _$; } if(deep && window.jQuery === jQuery){ window.jQuery = _jQuery; } };分析源碼之前,我們應(yīng)該注意幾個(gè)點(diǎn):
jQuery文件應(yīng)該在其它沖突庫(kù)文件之后導(dǎo)入;noConflict()必須在你導(dǎo)入jQuery文件之后使用;
導(dǎo)致沖突的庫(kù)中必須已經(jīng)存在一個(gè)$或者jQuery的命名空間,否則_jQuery = window.jQuery和_$ = window.$就沒(méi)有意義了
下面開(kāi)始分析源碼:
假如我們引入了兩個(gè)庫(kù),prototype.js和jQuery.js。prototype.js在前,jQuery.js在后,并且prototype.js中存在一個(gè)$的命名空間
//這句代碼其實(shí)是在jQuery文件最開(kāi)始的地方定義的,目的是保存prototype.js文件中的$或者jQuery命名空間 var _jQuery = window.jQuery,_$ = window.$; jQuery.noConflict = function(deep){ //這里判斷如果當(dāng)前的window.$已經(jīng)被jQuery占用了,就把之前保存的prototype.js中的$的變量_$賦值給window.$進(jìn)行覆蓋 if(window.$ === jQuery){ window.$ = _$; } //這里判斷如果deep為true并且當(dāng)前的window.jQuery也已經(jīng)被jQuery占用了,就把之前保存的prototype.js中的jQuery的變量_jQuery賦值給window.jQuery進(jìn)行覆蓋 if(deep && window.jQuery === jQuery){ window.jQuery = _jQuery; } };分析完上面的源碼之后,這里有幾個(gè)點(diǎn)要思考一下:
為什么調(diào)用noConflict()之后我們發(fā)現(xiàn)window.$已經(jīng)等于jQuery了?
在jQuery代碼最后有一段代碼可以解釋這個(gè)問(wèn)題:
if ( typeof window === "object" && typeof window.document === "object" ) { window.jQuery = window.$ = jQuery; }
如果prototype.js中沒(méi)有沖突的命名空間,那調(diào)用noConflict()會(huì)怎么樣么?
如果之前沒(méi)有沖突的命名空間,那_&和_jQuery都是undefined,所以window.$和window.jQuery都會(huì)被undefined覆蓋;也就是說(shuō),只要調(diào)用了noConflict(),jQuery就會(huì)交出$或者jQuery的控制權(quán),無(wú)論之前有沒(méi)有命名空間沖突
參考資料:
http://www.imooc.com/learn/172
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/82439.html
摘要:我這里有個(gè)不夠準(zhǔn)確但容易理解的說(shuō)法,就是檢查一個(gè)對(duì)象是否為另一個(gè)構(gòu)造函數(shù)的實(shí)例,為了更容易理解,下面將全部以是的實(shí)例的方式來(lái)說(shuō)。 underscore源碼分析之整體架構(gòu) 最近打算好好看看underscore源碼,一個(gè)是因?yàn)樽约捍_實(shí)水平不夠,另一個(gè)是underscore源碼比較簡(jiǎn)單,比較易讀。本系列打算對(duì)underscore1.8.3中關(guān)鍵函數(shù)源碼進(jìn)行分析,希望做到最詳細(xì)的源碼分析。今...
摘要:譯立即執(zhí)行函數(shù)表達(dá)式處理支持瀏覽器環(huán)境微信小程序。學(xué)習(xí)整體架構(gòu),利于打造屬于自己的函數(shù)式編程類庫(kù)。下一篇文章可能是學(xué)習(xí)的源碼整體架構(gòu)。也可以加微信,注明來(lái)源,拉您進(jìn)前端視野交流群。 前言 上一篇文章寫了jQuery整體架構(gòu),學(xué)習(xí) jQuery 源碼整體架構(gòu),打造屬于自己的 js 類庫(kù) 雖然看過(guò)挺多underscore.js分析類的文章,但總感覺(jué)少點(diǎn)什么。這也許就是紙上得來(lái)終覺(jué)淺,絕知此...
摘要:根據(jù)項(xiàng)目選型決定是否開(kāi)啟。為了壓縮,可維護(hù)為了支持從而使用代替變量存儲(chǔ)防沖突會(huì)用到,形如版本號(hào)聲明最終調(diào)用的是這個(gè)原型實(shí)際上。功能檢測(cè)統(tǒng)一兼容性問(wèn)題。 概覽 (function (){ (21 , 94) 定義了一些變量和函數(shù) jQuery=function(); (96 , 293) 給jQuery對(duì)象添加一些方法和屬性; (285 , 347) ...
摘要:根據(jù)項(xiàng)目選型決定是否開(kāi)啟。為了壓縮,可維護(hù)為了支持從而使用代替變量存儲(chǔ)防沖突會(huì)用到,形如版本號(hào)聲明最終調(diào)用的是這個(gè)原型實(shí)際上。功能檢測(cè)統(tǒng)一兼容性問(wèn)題。 概覽 (function (){ (21 , 94) 定義了一些變量和函數(shù) jQuery=function(); (96 , 293) 給jQuery對(duì)象添加一些方法和屬性; (285 , 347) ...
摘要:通常的做法是,為它們指定回調(diào)函數(shù)。請(qǐng)求返回請(qǐng)求返回請(qǐng)求返回異步隊(duì)列解耦異步任務(wù)和回調(diào)函數(shù)為模塊隊(duì)列模塊事件提供基礎(chǔ)功能。 前言 jQuery整體框架甚是復(fù)雜,也不易讀懂,這幾日一直在研究這個(gè)笨重而強(qiáng)大的框架。jQuery的總體架構(gòu)可以分為:入口模塊、底層模塊和功能模塊。這里,我們以jquery-1.7.1為例進(jìn)行分析。 jquery的總體架構(gòu) 16 (function( window,...
閱讀 1464·2023-04-25 17:18
閱讀 1894·2021-10-27 14:18
閱讀 2135·2021-09-09 09:33
閱讀 1852·2019-08-30 15:55
閱讀 2025·2019-08-30 15:53
閱讀 3449·2019-08-29 16:17
閱讀 3436·2019-08-26 13:57
閱讀 1739·2019-08-26 13:46