初入前端大門,邊熟悉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...