如何在JavaScript中设置循环引用

如何在JavaScript中设置循环引用,javascript,Javascript,我在JavaScript方面有一个小问题。我想做以下工作: var peter = { pet : spot } var spot = { owner : peter } 上面的代码运行正常,但peter.pet将未定义。而spot.owner将被定义。有没有更好的方法来做这样的事情: var peter = { pet : 'spot' } var spot = { owner : peter } peter.pet = eval(peter.pet) 任何洞察都将不

我在JavaScript方面有一个小问题。我想做以下工作:

var peter = {
  pet : spot
}

var spot = {
  owner : peter
}
上面的代码运行正常,但peter.pet将未定义。而spot.owner将被定义。有没有更好的方法来做这样的事情:

var peter = {
  pet : 'spot'
}

var spot = {
  owner : peter
}

peter.pet = eval(peter.pet)

任何洞察都将不胜感激……

因为对象是动态的,只需稍后添加
pet

var peter = {
    // anything else you want to set
};

var spot = {
    owner : peter
};

peter.pet = spot;

编辑-删除了向peter对象添加函数的错误尝试。要正确操作,请参阅Renan的帖子。

在创建spot后设置参考:

var peter = {
  pet : undefined
}

var spot = {
  owner : peter
}

peter.pet = spot
或者,您可以加强键入:

PetOwner = function () {};
PetOwner.prototype.pet = null;

Animal = function (owner) {
    this.owner = owner;
    this.owner.pet = this;
};
Animal.prototype.owner = null;

var peter = new PetOwner();
var spot = new Animal(peter);

你忍者攻击了我,所以你+1。我喜欢这个,因为这是我决定要做的。它是显式的,我不需要完全面向对象来做一些简单的事情。但是你的函数设置比我的好,所以对你来说+1!:-)只有一条评论,因为有人应该这么说:当我第一次阅读问题标题时,我的直接答案是“你不应该!”我相信你知道循环引用通常是一种不好的编程习惯。我不是说永远不要使用它们,但在大多数情况下,它们表明你需要重新思考对象的设置方式。一般来说,我100%同意你的观点。但是,在某些情况下,不尝试将结构展平更容易。
PetOwner = function () {};
PetOwner.prototype.pet = null;

Animal = function (owner) {
    this.owner = owner;
    this.owner.pet = this;
};
Animal.prototype.owner = null;

var peter = new PetOwner();
var spot = new Animal(peter);