其中之一,你不創建正常的對象。
我正在查看jQuery 1.7.2的擴展源代碼。
https://github.com/jquery/jquery/blob/master/src/core.js
而且我注意到行:
if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy))
必須評估到true
做深度複製。複製只是被複制的當前對象的一部分。
但是您並未創建「普通」對象。您正在創建通過使用new運算符調用構造函數生成的對象。
現在,在isPlainObject中,似乎必須對這些行進行評估。 (其中hasOwn是hasOwn = Object.prototype.hasOwnProperty
try {
// Not own constructor property must be Object
if (obj.constructor &&
!hasOwn.call(obj, "constructor") &&
!hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) {
return false;
}
} catch (e) {
// IE8,9 Will throw exceptions on certain host objects #9897
return false;
}
還有就是它的結論是不是「plainObject」。
這是有道理的,當你考慮的對象有一個構造也應該可以通過這個構造或創建最少使用某種「克隆」方法,就像你在其他語言/框架中看到的那樣。
你想用'jQuery'的'.clone'代替嗎? –
在jQuery論壇上有一個關於這個的話題最近,我認爲你的用例不屬於$ .extend我的用途的ThOD。 https://forum.jquery.com/topic/deep-copies-using-extend-on-object-instances –
這是一個相關的錯誤票http://bugs.jquery.com/ticket/10014 –