gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 08:58:43 26 4
gpt4 key购买 nike

我有一个对象:

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

那么如何在保留原型(prototype)链的情况下复制对象呢?

最佳答案

首先,您想要什么样的副本?深拷贝还是浅拷贝?假设你想要浅拷贝;只需将 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__;
}

fiddle :http://jsfiddle.net/U6uY4

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

<小时/>

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

关于Javascript:如何复制对象并保留其原型(prototype)链?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18071404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com