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

时间:2013-08-06 03:33:34

标签: javascript copy prototype-chain

我有一个对象:

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 () {}
}

那么如何通过保留原型链来复制对象?

1 个答案:

答案 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__;
}

小提琴:http://jsfiddle.net/U6uY4

如果您想要深层复制,请将for .. in循环替换为适合您的用例的深层复制算法。


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