1 つは、通常のオブジェクトを作成していないことです。
拡張用の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
ディープ コピーを行うには to を評価する必要があります。copy は、コピーされている現在のオブジェクトの一部にすぎません。
しかし、「プレーンな」オブジェクトを作成していません。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」ではないと結論付けているところがあります。
これは、コンストラクターを持つオブジェクトがおそらくそのコンストラクターを介して作成されるか、他の言語/フレームワークで見られるように少なくとも何らかの「クローン」メソッドを使用する必要があると考える場合に理にかなっています。