通常のオブジェクトは作成していません。
私は、拡張のための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
に評価することがあります。コピーは現在コピーされているオブジェクトの一部に過ぎません。
しかし、 "普通の"オブジェクトを作成しているわけではありません。新しい演算子でコンストラクタを呼び出すことによって生成されたオブジェクトを作成しています。
今、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フォーラムにありました最近私はあなたのユースケースが$の目的の外にあると思う。 thod。 https://forum.jquery.com/topic/deep-copies-using-extend-on-object-instances –
ここに関連するバグチケットhttp://bugs.jquery.com/ticket/10014 –