- 相關(guān)推薦
關(guān)于jQuery學(xué)習筆記之jQuery的分析
deep是布爾值,表示是否進(jìn)行深度合并,默認是false,不執行深度合并.
通過(guò)這種方式可以在jQuery或jQuery.fn上添加新的屬性和方法,jQuery的其他模塊大都是這么實(shí)現的.
給jQuery添加擴展時(shí)用$.extend()
如:jQuery.extend({add:function(a,b){return a+b}})
使用:$.add(1,3)=====>4;
給jQuery實(shí)例對象添加擴展時(shí)用$.fn.extend();
$.fn.extend({gys:function(){$(this).css("color","red")}});
調用:$("div.guo").gys();
因為參數的個(gè)數是不確定的,所以沒(méi)有列出可接受的具體參數.
options:指向某個(gè)源對象.
name:某個(gè)源對象的某個(gè)屬性名.
src:目標對象的某個(gè)屬性的原始值.
copy:某個(gè)源對象的某個(gè)屬性的值
copyIsArray:指示copy是否是數組
clone:深度復制時(shí)原始值的修正值.
target:目標對象.
i:源對象的起始下標.
length:參數的個(gè)數,用于修正變量target.
deep:是否執行深度復制.
333~338:如果第一個(gè)參數是布爾值,則把target賦值給deep,target在重新獲取值,把第二個(gè)參數賦給target.
這個(gè)時(shí)候i值從一開(kāi)始的1變成了2.表示源對象本來(lái)是從第二個(gè)元素開(kāi)始的,現在變成了第三個(gè)元素了.這段代碼結合
327行代碼就知道為什么會(huì )有這個(gè)if語(yǔ)句了.原來(lái)函數extend在執行的時(shí)候,不管參數情況如何,首先給target和i賦值.
然后再后面修正.
341~343:如果目標對象target不是對象,不是函數,則targeted={};
346~349:length和i相等時(shí),表示沒(méi)有傳入objcet1,...之類(lèi)的參數,
這個(gè)時(shí)候把this當前對象(jQuery或jQuery.fn)作為目標對象,在把i減一.從而使傳入的對象當作源對象.
351行開(kāi)始循環(huán),i表示開(kāi)始源對象的下標,是一個(gè)非常巧妙的用法.
353行也很精彩,它把獲取源對象和對源對象的判斷放在了一條語(yǔ)句中,只有源對象不為空時(shí)才會(huì )執行.
354~362行,變量src是原始值,變量copy是復制值.如果target和copy引用相同,為了遍歷時(shí)死循環(huán),
因此不會(huì )覆蓋目標對象的同名屬性.如果注釋掉360行,下面的代碼會(huì )出現異常.
var obj={};
obj.n1=obj;
$.extend(true,obj,{n2:obj});
在不同瀏覽器中會(huì )出項不同的報錯,但是都無(wú)一例外的出現卡屏很久的現像.
365~372行,如果是深度合并,且復制copy是普通javascript對象或數組,則遞歸合并.
378~380行,如果不是深度合并,并且copy不是undefined,則直接覆蓋目標對象的同名屬性.
【jQuery學(xué)習筆記之jQuery的分析】相關(guān)文章:
jQuery的DOM操作筆記07-29
jQuery 源碼分析和Ready函數06-28
jQuery程序設計08-05
jquery提交按鈕的代碼07-28
jQuery中prev()方法用法07-16
如何理解jquery事件冒泡09-15