摘要:功能文檔中對(duì)方法的描述是釋放對(duì)變量的控制權(quán)。不是很明確,慢慢解釋下。類似的手法方法也實(shí)現(xiàn)了對(duì)變量的釋放控制主要用于同時(shí)引入多個(gè)版本的。這里只對(duì)全局變量的處理進(jìn)行解析,變量的處理方式類似。所以其他占用全局變量的庫要先于引用,方法才能正確工作。
功能
jQuery API文檔中對(duì)noConflict方法的描述是:"釋放jQuery對(duì)變量$的控制權(quán)"。( ′? ??`)不是很明確,慢慢解釋下。
我們都知道jQuery庫占用了全局變量$(是變量jQuery的別名), 但是其他JS庫也可以使用該變量了(比如zeptoJS, prototypejs)。當(dāng)項(xiàng)目中同時(shí)引用了jQuery和其他占用全局變量$的庫時(shí),可能會(huì)導(dǎo)致變量$沖突。所以jQuery在給全局變量$賦值的時(shí)候先保存當(dāng)時(shí)全局變量$已經(jīng)存在的值,然后通過jQuery.noConflict方法把原來保存的值重新賦值給全局變量$。
類似的手法noConflict方法也實(shí)現(xiàn)了對(duì)jQuery變量的釋放控制(主要用于同時(shí)引入多個(gè)版本的jQuery)。
這里只對(duì)全局變量$的處理進(jìn)行解析,jQuery變量的處理方式類似。
jQuery v3.2.1中noConflict方法的完整實(shí)現(xiàn)(解釋見注釋):
var // 保存此時(shí)全局變量jQuery的值,可能其他版本的jQuery已經(jīng)加載了 _jQuery = window.jQuery, // 保存此時(shí)全局變量$的值,可能其JS庫已經(jīng)占用了全局變量$ _$ = window.$; jQuery.noConflict = function( deep ) { // 如果此時(shí)全局變量$還屬于jQuery,則把全局變量$在jQuery初始化時(shí)的值_$重新賦值給$。 if ( window.$ === jQuery ) { window.$ = _$; } // 如果參數(shù)deep為true且此時(shí)全局變量jQuery還屬于當(dāng)前版本的jQuery,則把全局變量jQuery在當(dāng)前版本jQuery初始化時(shí)的值_jQuery重新賦值給jQuery。 if ( deep && window.jQuery === jQuery ) { window.jQuery = _jQuery; } // 返回當(dāng)前版本的jQuery變量 return jQuery; };
通過實(shí)現(xiàn)發(fā)現(xiàn)jQuery庫在且只在初始化的時(shí)候會(huì)保存當(dāng)時(shí)全局變量$和jQuery的值,保存的值會(huì)在方法noConflict調(diào)用的時(shí)候復(fù)原。所以其他占用全局變量$的庫要先于jQuery引用,noConflit方法才能正確工作。
舉例假設(shè)有個(gè)js文件glib.js也占用了全局變量$:
;(function() { var glib = function() { console.log("I am from glib js"); }; window.$ = window.glib = glib; })()
index.html 內(nèi)容:
jQuery hi jQuery noConflit
注意一定在jQuery前引用glib.js文件。這樣當(dāng)jQuery初始化時(shí),全局變量已經(jīng)被glib占用了。
其他調(diào)用noConflict方法釋放全局變量$的控制權(quán)后,可以使用變量jQuery使用代替,或者給jQuery另其一個(gè)別名($也只是一個(gè)別名?。?/p>
怎么還可以使用變量$呢?一般通過立即執(zhí)行函數(shù)方式繼續(xù)使用全局變量$
參考
jQuery API noConflict
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/89832.html
摘要:將或者的控制權(quán)讓給第一個(gè)實(shí)現(xiàn)它的那個(gè)庫,確保不會(huì)與其它庫的對(duì)象發(fā)生沖突。 noConflict() noConflict()將$或者jQuery的控制權(quán)讓給第一個(gè)實(shí)現(xiàn)它的那個(gè)庫,確保jQuery不會(huì)與其它庫的$對(duì)象發(fā)生沖突。 jQuery中源碼如下: var _jQuery = window.jQuery, _$ = window.$; jQuery.noConflict =...
摘要:一初步了解介紹由創(chuàng)建于年一月的開源項(xiàng)目,憑借著跨平臺(tái)的兼容性,簡(jiǎn)潔的語法,極大的簡(jiǎn)化了人員遍歷文檔,操作,處理事件,執(zhí)行動(dòng)畫,和開發(fā)的操作。只建立一個(gè)名為的對(duì)象。對(duì)發(fā)生在同一個(gè)對(duì)象上的一組動(dòng)作,可以直接連寫無需重復(fù)獲取對(duì)象。 jQuery(一)-- 初步了解 jQuery介紹 由John Resig創(chuàng)建于2006年一月的開源項(xiàng)目,jQuery憑借著跨平臺(tái)的兼容性,簡(jiǎn)潔的語法,極大的簡(jiǎ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,...
摘要:,翻譯自官方網(wǎng)站。如何建立一個(gè)基礎(chǔ)的插件有時(shí),你想要在你的代碼里面實(shí)現(xiàn)一個(gè)可復(fù)用的功能。譯者注建立一個(gè)基礎(chǔ)的插件假設(shè)我們現(xiàn)在要建立一個(gè)讓元素里的文字變綠的插件。鏈?zhǔn)讲僮髯畲蟮奶攸c(diǎn)之一就是支持鏈?zhǔn)讲僮?。例如譯者注的作用是返還的控制權(quán)。 _How to Create a Basic Plugin_, 翻譯自 jQuery 官方網(wǎng)站。 如何建立一個(gè)基礎(chǔ)的插件 有時(shí),你想要在你的代碼里面實(shí)現(xiàn)一...
摘要:第二個(gè)參數(shù)是表示請(qǐng)求狀態(tài)的字符串,,,第三個(gè)參數(shù)是當(dāng)錯(cuò)誤發(fā)生時(shí),具體的錯(cuò)誤描述,等請(qǐng)求結(jié)束無論成功或失敗時(shí)的一個(gè)回調(diào)函數(shù)。一個(gè)參數(shù)名,默認(rèn)是,一般用于指明回調(diào)函數(shù)名。的回調(diào)函數(shù)的執(zhí)行順序與它們的添加順序一致。 jQuery學(xué)習(xí)筆記 jQuery大部分功能需要根據(jù)文檔的DOM模型來工作,首先需要正確地解析到整個(gè)文檔的DOM模型結(jié)構(gòu)。使用jQuery需要在整個(gè)文檔被瀏覽器完全加載后才開始進(jìn)...
閱讀 3249·2021-11-23 09:51
閱讀 1638·2021-11-22 09:34
閱讀 2924·2021-10-27 14:15
閱讀 2405·2021-10-12 10:17
閱讀 2016·2021-10-12 10:12
閱讀 1034·2021-09-27 14:00
閱讀 2077·2021-09-22 15:19
閱讀 1104·2019-08-30 10:51