extend 的實現原始碼 (原始碼學習1)

2021-09-08 15:01:38 字數 1671 閱讀 5295

目標:

$.extend(

})

console.log($.add(1,2));

是怎麼實現可以將add函式掛在jquery後面?

jquery -v1.12.4

1 jquery.extend = jquery.fn.extend = function

() ,

4 i = 1,

5 length =arguments.length,

6 deep = false;7

8//handle a deep copy situation

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

14 i++;15}

1617

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

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

2122

//extend jquery itself if only one argument is passed

23if ( i ===length )

2728

for ( ; i < length; i++)

4243

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

44if ( deep && copy && ( jquery.isplainobject( copy ) ||

45 ( copyisarray =jquery.isarray( copy ) ) ) ) else;53

}5455//

never move original objects, clone them

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

5758

//don't bring in undefined values

59 } else

if ( copy !==undefined ) 62}

63}64}

6566

//return the modified object

67return

target;

68 };

分析:

第3行:取到函式add

第23-26行:將this也就是jquery的例項物件,function(selector, context){} 賦值給target.

第31行:將函式add賦值給options,並進行遍歷。

第36行:將options = }的函式賦值給copy.

第60行:通過target[name]=copy; 將jquery的例項新增乙個屬性add 就成了jquery['add']=function (a,b);

jQuery原始碼之extend的實現

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

jQuery原始碼學習之extend

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

JQuery 原始碼解析 extend 詳解

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