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);```它似乎起作用了。