成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

jQuery源碼分析之noConflict()

Yuanf / 1024人閱讀

摘要:將或者的控制權(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

相關(guān)文章

  • underscore源碼剖析整體架構(gòu)

    摘要:我這里有個(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ì)的源碼分析。今...

    2shou 評(píng)論0 收藏0
  • 學(xué)習(xí) underscore 源碼整體架構(gòu),打造屬于自己的函數(shù)式編程類庫(kù)

    摘要:譯立即執(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é)淺,絕知此...

    junnplus 評(píng)論0 收藏0
  • FE.SRC-逐行分析jQuery2.0.3源碼-完整筆記

    摘要:根據(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) ...

    Lin_R 評(píng)論0 收藏0
  • FE.SRC-逐行分析jQuery2.0.3源碼-完整筆記

    摘要:根據(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) ...

    褰辯話 評(píng)論0 收藏0
  • 淺析jQuery整體框架與實(shí)現(xiàn)(上)

    摘要:通常的做法是,為它們指定回調(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,...

    VEIGHTZ 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<