JavaScript:将循环引用对象的浅拷贝字符串化?

sim*_*mon 5 javascript json stringify

有没有办法让下面的浅拷贝只得到一层深?我有一种使用完全不同的设计来解决这个问题的方法,但我想知道是否有其他人遇到过我之前尝试转换为字符串的问题。

var SomeObjClass = function() {
    var self = this;
    this.group = {
        members: [self]
    };
};
var p = new SomeObjClass();
var str = JSON.stringify(p);
Run Code Online (Sandbox Code Playgroud)

Tha*_*you 2

有点不清楚你在问什么,但如果你的目标是简单地字符串化一个圆形对象,你必须重写toJSON以指定你希望如何表示你的对象

function SomeObjClass () {
  var self = this;
  this.group = {
    members: [self]
  };
}

SomeObjClass.prototype.addMember = function(m) {
  this.group.members.push(m);
};

// when stringifying this object, don't include `self` in group.members
SomeObjClass.prototype.toJSON = function() {
  var self = this;
  return {
    group: {
      members: self.group.members.filter(function (x) {
        return x !== self
      })
    }
  };
}

var a = new SomeObjClass();
var b = new SomeObjClass();
a.addMember(b);

console.log(JSON.stringify(a))
Run Code Online (Sandbox Code Playgroud)

这可能是我在不查看更多代码的情况下可以为您提供的最好帮助。我不知道你如何使用这段代码,但无论如何,这可能不是你的类的最佳设计。如果您分享该类的其余部分以及使用它的代码,我们可能可以更有效地帮助您。