Javascript:如何复制对象并保持其原型链?

Javascript:如何复制对象并保持其原型链?,javascript,copy,prototype-chain,Javascript,Copy,Prototype Chain,我有一个目标: var obj = { name: "Mike" } // and its prototype property: obj.__proto__: say: function () {...} walk: function () {...} 我要复制它并保留\uuuuuuuuuuuuuuuu 首先我想到jQuery$。扩展方法: $.extend({},obj) 但是返回的结果会合并\uuuuuuuuuuuuuuuuu如下所示: { name: "

我有一个目标:

var obj = {
     name: "Mike"
}

// and its prototype property:
obj.__proto__:
   say: function () {...}
   walk: function () {...}
我要复制它并保留
\uuuuuuuuuuuuuuuu

首先我想到jQuery
$。扩展
方法:

$.extend({},obj)

但是返回的结果会合并
\uuuuuuuuuuuuuuuuu
如下所示:

{
    name: "Lee",
    say: function () {},
    walk: function () {}
}

那么,我如何复制对象并保留原型链呢?

首先,你想要什么样的副本?深拷贝还是浅拷贝?假设你想要浅拷贝;只需将
src
自己的属性(除非
dest
已经有相同的属性)和
\uuuu proto\uuuu
复制到
dest

function copy(dest, src) {
    var p;
    for (p in src) {
        if (src.hasOwnProperty(p) && !dest.hasOwnProperty(p)) {
            dest[p] = src[p];
        }
    }
    dest.__proto__ = src.__proto__;
}
小提琴:

如果需要深度复制,请替换..的
。。在
中,循环到适合您的用例的深度复制算法



请注意,这是不常见的要求。我建议你再想想你真正想做什么。

你不得不在问题中提到它。不管怎样,你真的想深度复制吗?JavaScript中的深度复制比您想象的要困难得多。您的属性可以是
RegExp
还是
Date
?对于这种情况,您有任何用例吗?考虑这一点,然后谷歌JavaScript深层复制并选择最合适的方法,然后替换<代码>。在
中循环到那个。谢谢。我用这行代码克隆了对象并更改了一个属性:``让clone=object.setPrototypeOf({…this,scanned},this.\uu proto\uuu);```它似乎起作用了。