首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在javascript中进行深度克隆

如何在javascript中进行深度克隆
EN

Stack Overflow用户
提问于 2010-12-16 18:49:52
回答 18查看 149K关注 0票数 125

如何深度克隆JavaScript对象?

我知道有很多基于框架的函数,比如JSON.parse(JSON.stringify(o))$.extend(true, {}, o),但我不想使用这样的框架。

创建深度克隆的最优雅或最有效的方法是什么?

我们确实关心像克隆数组这样的边缘情况。不破坏原型链,处理自我引用。

我们并不关心是否支持复制DOM对象等,因为.cloneNode的存在就是出于这个原因。

因为我主要想在node.js中使用深度克隆,所以使用V8引擎的ES5特性是可以接受的。

编辑

在任何人提出建议之前,让我先提一下,通过原型继承对象来创建副本和克隆它之间存在明显的区别。前者把原型链搞得一团糟。

在读完你的答案后,我发现克隆整个对象是一个非常危险和困难的游戏。以下面的基于闭包的对象为例

代码语言:javascript
复制
var o = (function() {
     var magic = 42;

     var magicContainer = function() {
          this.get = function() { return magic; };
          this.set = function(i) { magic = i; };
     }

      return new magicContainer;
}());

var n = clone(o); // how to implement clone to support closures

有没有办法写一个克隆函数来克隆对象,在克隆时具有相同的状态,但如果不用JS编写JS解析器就不能改变o的状态。

在现实世界中应该不再需要这样的函数了。这仅仅是学术兴趣。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4459928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档