jQuery學(xué)習(xí)筆記之jQuery.extend(),jQuery.fn.extend()分析
deep是布爾值,表示是否進(jìn)行深度合并,默認(rèn)是false,不執(zhí)行深度合并.
通過(guò)這種方式可以在jQuery或jQuery.fn上添加新的屬性和方法,jQuery的其他模塊大都是這么實(shí)現(xiàn)的.
給jQuery添加擴(kuò)展時(shí)用$.extend()
如:jQuery.extend({add:function(a,b){return a+b}})
使用:$.add(1,3)=====>4;
給jQuery實(shí)例對(duì)象添加擴(kuò)展時(shí)用$.fn.extend();
$.fn.extend({gys:function(){$(this).css("color","red")}});
調(diào)用:$("div.guo").gys();
因?yàn)閰?shù)的個(gè)數(shù)是不確定的,所以沒(méi)有列出可接受的具體參數(shù).
options:指向某個(gè)源對(duì)象.
name:某個(gè)源對(duì)象的某個(gè)屬性名.
src:目標(biāo)對(duì)象的某個(gè)屬性的原始值.
copy:某個(gè)源對(duì)象的某個(gè)屬性的值
copyIsArray:指示copy是否是數(shù)組
clone:深度復(fù)制時(shí)原始值的修正值.
target:目標(biāo)對(duì)象.
i:源對(duì)象的起始下標(biāo).
length:參數(shù)的個(gè)數(shù),用于修正變量target.
deep:是否執(zhí)行深度復(fù)制.
333~338:如果第一個(gè)參數(shù)是布爾值,則把target賦值給deep,target在重新獲取值,把第二個(gè)參數(shù)賦給target.
這個(gè)時(shí)候i值從一開(kāi)始的1變成了2.表示源對(duì)象本來(lái)是從第二個(gè)元素開(kāi)始的,現(xiàn)在變成了第三個(gè)元素了.這段代碼結(jié)合
327行代碼就知道為什么會(huì)有這個(gè)if語(yǔ)句了.原來(lái)函數(shù)extend在執(zhí)行的時(shí)候,不管參數(shù)情況如何,首先給target和i賦值.
然后再后面修正.
341~343:如果目標(biāo)對(duì)象target不是對(duì)象,不是函數(shù),則targeted={};
346~349:length和i相等時(shí),表示沒(méi)有傳入objcet1,...之類(lèi)的參數(shù),
這個(gè)時(shí)候把this當(dāng)前對(duì)象(jQuery或jQuery.fn)作為目標(biāo)對(duì)象,在把i減一.從而使傳入的對(duì)象當(dāng)作源對(duì)象.
351行開(kāi)始循環(huán),i表示開(kāi)始源對(duì)象的下標(biāo),是一個(gè)非常巧妙的用法.
353行也很精彩,它把獲取源對(duì)象和對(duì)源對(duì)象的判斷放在了一條語(yǔ)句中,只有源對(duì)象不為空時(shí)才會(huì)執(zhí)行.
354~362行,變量src是原始值,變量copy是復(fù)制值.如果target和copy引用相同,為了遍歷時(shí)死循環(huán),
因此不會(huì)覆蓋目標(biāo)對(duì)象的同名屬性.如果注釋掉360行,下面的代碼會(huì)出現(xiàn)異常.
var obj={};
obj.n1=obj;
$.extend(true,obj,{n2:obj});
在不同瀏覽器中會(huì)出項(xiàng)不同的報(bào)錯(cuò),但是都無(wú)一例外的出現(xiàn)卡屏很久的現(xiàn)像.
365~372行,如果是深度合并,且復(fù)制copy是普通javascript對(duì)象或數(shù)組,則遞歸合并.
378~380行,如果不是深度合并,并且copy不是undefined,則直接覆蓋目標(biāo)對(duì)象的同名屬性.
- jQuery.extend()、jQuery.fn.extend()擴(kuò)展方法示例詳解
- 開(kāi)發(fā)插件的兩個(gè)方法jquery.fn.extend與jquery.extend
- 淺談jquery.fn.extend與jquery.extend區(qū)別
- jQuery插件開(kāi)發(fā)的兩種方法及$.fn.extend的詳解
- jquery的extend和fn.extend的使用說(shuō)明
- jQuery中extend()和fn.extend()方法詳解
- Jquery實(shí)現(xiàn)$.fn.extend和$.extend函數(shù)
- jquery簡(jiǎn)單插件制作(fn.extend)完整實(shí)例
- 深入理解jquery的$.extend()、$.fn和$.fn.extend()
- jQuery.extend 與 jQuery.fn.extend的用法及區(qū)別實(shí)例分析
相關(guān)文章
jQuery實(shí)現(xiàn)漸變彈出層和彈出菜單的方法
這篇文章主要介紹了jQuery實(shí)現(xiàn)漸變彈出層和彈出菜單的方法,涉及jQuery漸變效果及css顯示的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02jQuery+HTML5實(shí)現(xiàn)圖片上傳前預(yù)覽效果
這篇文章主要介紹了jQuery+HTML5實(shí)現(xiàn)圖片上傳前預(yù)覽效果,涉及jquery操作圖片動(dòng)態(tài)顯示效果,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-08-08使用JS或jQuery模擬鼠標(biāo)點(diǎn)擊a標(biāo)簽事件代碼
這篇文章主要介紹了使用JS或jQuery模擬鼠標(biāo)點(diǎn)擊a標(biāo)簽事件代碼,需要的朋友可以參考下2014-03-03jQueryeasyui 中如何使用datetimebox 取兩個(gè)日期間相隔的天數(shù)
這篇文章主要介紹了jQueryeasyui 中使用datetimebox 取兩個(gè)日期間相隔的天數(shù),需要的朋友參考下吧2017-06-06jQuery動(dòng)態(tài)添加 input type=file的實(shí)現(xiàn)代碼
有時(shí)候需要在頁(yè)面上允許用戶(hù)上傳多個(gè)文件,個(gè)數(shù)由用戶(hù)自己決定,個(gè)數(shù)多了也可以刪除,使用jQuery可以很簡(jiǎn)單的實(shí)現(xiàn)這個(gè)功能2012-06-06Jquery+bootstrap實(shí)現(xiàn)表格行置頂置底上移下移操作詳解
這篇文章主要為大家詳細(xì)介紹了Jquery+bootstrap實(shí)現(xiàn)表格行置頂置底上移下移操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02Eclipse配置Javascript開(kāi)發(fā)環(huán)境圖文教程
這篇文章主要介紹了Eclipse配置Javascript開(kāi)發(fā)環(huán)境圖文教程,需要的朋友可以參考下2015-01-01