我有一个大对象,我想转换为JSON并发送.但它具有圆形结构.我想抛出任何存在的循环引用并发送任何可以进行字符串化的内容.我怎么做?
谢谢.
var obj = {
  a: "foo",
  b: obj
}
我想将obj字符串化为:
{"a":"foo"}
你如何深度克隆Javascript对象?
我知道基于类似的框架有各种各样的功能JSON.parse(JSON.stringify(o)),$.extend(true, {}, o)但我不想使用这样的框架.
什么是创建深度克隆的最优雅或最有效的方法.
我们关心像克隆数组这样的边缘情况.不打破原型链,处理自我引用.
我们不关心支持复制DOM对象,因为因为.cloneNode这个原因而存在.
由于我主要想使用深度克隆来node.js使用V5引擎的ES5功能是可以接受的.
[编辑]
在任何人建议让我提及之前,通过原型继承对象并克隆它来创建副本之间存在明显差异.前者使原型链变得混乱.
[进一步编辑]
在阅读完答案后,我发现了一个令人讨厌的发现,即克隆整个物体是一个非常危险和困难的游戏.以下面的基于闭包的对象为例
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
有没有办法编写克隆对象的克隆函数,在克隆时具有相同的状态,但是如果不在oJS中编写JS解析器,则无法改变状态.
这样的功能不再需要现实世界.这仅仅是学术兴趣.