Javascript:如何复制对象并保持其原型链
Javascript: how to copy a object and keep its 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 () {}
}
那么我如何在保持原型链的情况下复制对象呢?
首先,您想要什么样的副本?深度复制还是浅层复制?假设您想要浅拷贝;只需将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
循环替换为适合您的用例的深度复制算法。
请注意,这是不常见的要求。我建议你再想想你真正想做什么。
相关文章:
- Node.js中的JavaScript原型对象效率
- 获取原型对象的名称
- 如何维护对原型对象的访问
- 文字与原型对象表示法的数据结构
- 使用原型对象向javascript对象添加自定义属性和方法的建议
- 正在重置原型对象的构造函数属性
- 编写JS原型时,所有函数都应该使用原型对象
- 什么's是原型对象的真实名称
- Javascript - 使用数组作为函数的参数,并在创建新的原型对象时更改值
- 在原型对象 jquery 上将一个按钮与另一个按钮不同
- 原型对象
- 循环遍历数组时的原型对象
- 为什么初始化的 JavaScript 对象不包含原型对象
- JavaScript 原型对象 - 如何访问继承
- Javascript:获取此原型对象名称
- 如何在数据绑定后在 KNOCKOUT js 中使用“with”访问另一个原型对象
- 这在 JavaScript 中的原型对象中的值
- 在主干中向原型对象添加值不起作用
- 删除函数原型对象
- 为什么当我在这个JavaScript对象上使用反射时,我可以'看不到在其原型对象中定义的属性