如何在JavaScript中设置循环引用
我在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) 任何洞察都将不
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);