jquery原始碼 extend函式的歸納

2021-08-07 18:35:46 字數 1517 閱讀 7517

初入前端大門,邊熟悉js語法,邊做專案,邊看看jquery原始碼。

對jquery的功能都還不算熟悉,更沒什麼整體的概念,所以打算從一些點開始。

打算就著w3c上的jquery教程,把每一項功能過一遍,然後再扒一下原始碼實現。

extend函式實現物件複製,將乙個或多個源物件中的屬性複製到目標物件中。

jquery.extend = jquery.fn.extend = function

() ,

i = 1,

length = arguments.length,

deep = false;

// handle a deep copy situation

if ( typeof target === "boolean" ) ;

// skip the boolean and the target

i = 2;

}// handle case when target is a string or something (possible in deep copy)

if ( typeof target !== "object" && !jquery.isfunction(target) ) ;

}// extend jquery itself if only one argument is passed

if ( length === i )

for ( ; i < length; i++ )

// recurse if we're merging plain objects or arrays

if ( deep && copy && ( jquery.isplainobject(copy) || (copyisarray = jquery.isarray(copy)) ) ) else ;

}// never move original objects, clone them

target[ name ] = jquery.extend( deep, clone, copy );

// don't bring in undefined values

} else

if ( copy !== undefined ) }}

}// return the modified object

return target;

};

1,判斷拷貝深淺;

深淺不同,拷貝策略不同。

2,判斷引數;

只有乙個源物件時,目標物件設為jquery自身。

有些目標物件非法(如:number),則需要重設為乙個新的object。

3,遍歷每個源物件的每個屬性執行複製操作;

如果需要深拷貝&&(目標是object || 目標是陣列)則執行遞迴,遞迴複製每個屬性,直至屬性無法深拷貝(如:number和string就無法深拷貝)為止。

所以,深淺拷貝的區別也可以看出,即:引用和複製的區別,淺拷貝只是對目標物件的引用,而深拷貝則會建立物件並賦值。

jQuery原始碼學習之extend

extend用於合併物件,可選擇是否深複製。使用時,第乙個引數為合併後的物件。如果要進行深拷貝,則引數1為true,引數2為要合併的目標物件。儘管jquery官方文件明確指出第乙個引數是false的呼叫情況並不支援,但是這個版本的原始碼中,判斷第乙個引數的型別雖有限定是boolean型別,但卻未對其...

JQuery 原始碼解析 extend 詳解

前言 最近想重寫乙個dropdown外掛程式,於是想到了使用jquey實現外掛程式,於是重溫了一波 extend 的知識,然後總結了這篇筆記 正文 extend src 該方法將src合併到jquery的例項物件中去 下面是乙個例子 var newsrc extend src1,src2,src3....

jQuery原始碼之extend的實現

extend是jquery中乙個比較核心的 如果有檢視jquery的原始碼的話,就會發現jquery在多處呼叫了extend方法。作用對任意物件進行擴充套件 擴充套件某個例項物件 對jquery本身的例項方法進行擴充套件 實現基礎版本,對簡單物件進行擴充套件 jquery.prototype.ext...