我有一个对象:
var obj = {
name: "Mike"
}
// and its prototype property:
obj.__proto__:
say: function () {...}
walk: function () {...}
我想复制它并保留__proto__
首先我想到了jQuery $.extend
方法:
$.extend({}, obj)
但是什么是返回会合并__proto__
,如:
{
name: "Lee",
say: function () {},
walk: function () {}
}
那么如何通过保留原型链来复制对象?
答案 0 :(得分:0)
所有的火焰,你想要什么样的副本?深拷贝还是浅拷贝?假设你想要浅拷贝;只需复制src
自己的属性(除非dest
已具有相同的属性),__proto__
为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__;
}
如果您想要深层复制,请将for .. in
循环替换为适合您的用例的深层复制算法。
请注意,这是不常见的要求。我建议你再想一想你真正想做什么。