日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
談?wù)刯Query中的防沖突機(jī)制

許多的 JS 框架類庫都選擇使用 $ 符號作為函數(shù)或變量名,jQuery 是其中最為典型的一個(gè)。在 jQuery 中,$ 符號只是 window.jQuery 對象的一個(gè)引用,因此即使 $ 被刪除,window.jQuery 依然是保證整個(gè)類庫完整性的堅(jiān)強(qiáng)后盾。jQuery 的 API 設(shè)計(jì)充分考慮了多框架之間的引用沖突,我們可以使用 jQuery.noConflict 方法來輕松實(shí)現(xiàn)控制權(quán)的移交。

十多年的蓮花網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營銷型網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整蓮花建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“蓮花網(wǎng)站設(shè)計(jì)”,“蓮花網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

jQuery.noConflict 方法包含一個(gè)可選的布爾參數(shù)[1],用以決定移交 $ 引用的同時(shí)是否移交 jQuery 對象本身:

 
 
 
  1. jQuery.noConflict([removeAll]) 

缺省情況下,執(zhí)行 noConflict 會(huì)將變量 $ 的控制權(quán)移交給第一個(gè)產(chǎn)生 $ 的庫;當(dāng) removeAll 設(shè)置為 true 時(shí),執(zhí)行 noConflict 則會(huì)將 $ 和 jQuery 對象本身的控制權(quán)全部移交給第一個(gè)產(chǎn)生他們的庫。

例如在 KISSY 和 jQuery 混用,并且慣用 $ = KISSY 來簡化 API 操作的時(shí)候,就能夠通過這個(gè)方法解決命名沖突的問題。

那么這個(gè)機(jī)制是如何實(shí)現(xiàn)的呢?閱讀 jQuery 源碼開頭[2],首先做的一件事情是這樣的:

 
 
 
  1. // Map over jQuery in case of overwrite  
  2. _jQuery = window.jQuery,  
  3.    
  4. // Map over the $ in case of overwrite  
  5. _$ = window.$, 

容易理解的是,jQuery 通過兩個(gè)私有變量映射了 window 環(huán)境下的 jQuery 和 $ 兩個(gè)對象,以防止變量被強(qiáng)行覆蓋。一旦 noConflict 方法被調(diào)用,則通過 _jQuery, _$, jQuery, $ 四者之間的差異,來決定控制權(quán)的移交方式,具體的代碼如下:

 
 
 
  1. noConflict: function( deep ) {  
  2.                 if ( window.$ === jQuery ) {  
  3.                         window.$ = _$;  
  4.                 }  
  5.    
  6.                 if ( deep && window.jQuery === jQuery ) {  
  7.                         window.jQuery = _jQuery;  
  8.                 }  
  9.    
  10.                 return jQuery;  
  11.         } 

再來看上面所說的參數(shù)設(shè)定問題,如果 deep 沒有設(shè)置,_$ 覆蓋 window.$,此時(shí) jQuery 別名 $ 失效,但 jQuery 本身完好無損。如果有其他類庫或代碼重新定義了 $ 變量,它的控制權(quán)就完全交接出去了。反之如果 deep 設(shè)置為 true 的話,_jQuery 覆蓋 window.jQuery,此時(shí) $ 和 jQuery 都將失效。

這種操作的好處是,不管是框架混用還是 jQuery 多版本共存這種高度沖突的執(zhí)行環(huán)境,由于 noConflict 方法提供的移交機(jī)制,以及本身返回未被覆蓋的 jQuery 對象,完全能夠通過變量映射的方式解決沖突。

但無法避免的事實(shí)是可能導(dǎo)致的插件失效等問題,當(dāng)然通過簡單修改上下文參數(shù)即可恢復(fù) $ 別名

 
 
 
  1. var query = jQuery.noConflict(true);  
  2. (function ($) {  
  3.    
  4.      // 插件或其他形式的代碼,也可以將參數(shù)設(shè)為 jQuery  
  5.    
  6. })(query); 

[1] http://api.jquery.com/jQuery.noConflict/#jQuery-noConflict-removeAll

[2] https://github.com/jquery/jquery/blob/master/src/core.js


新聞標(biāo)題:談?wù)刯Query中的防沖突機(jī)制
轉(zhuǎn)載源于:http://www.dlmjj.cn/article/cddgigh.html