我知道,获取当前对象的父对象是一个旧主题,但是,我对提供的解决方案提供了一个问题来解决此问题。大多数我已经找到了答案,说简单地创建其设置为父对象的子对象中的属性。如果在子对象中创建对父对象的引用会创建一个循环关系,那么这怎么能成为一个有效的解决方案呢?下面是说明这种解决方案的例子 -是否创建子对象中,以父对象的引用导致循环关系?
var obj = {
innerObj: {},
setParent: function(){
this.innerObj.parent = this;
}
};
obj.setParent();
这样做的结果将创建一个对象,它看起来像这样 -
obj.innerObj.parent.innerObj.parent.innerObj ......,只是不断去。
我一直在寻找不同的解决方案。如果我们有过怎样的对象被创建,然后控制一个可能的解决办法是这样的 -
var obj = function(that){
that = that || this;
var o = { getParent: function(){ return that; } };
return o;
};
现在,当您创建一个新的对象,你可以简单地传递要返回的父对象并且不创建循环类型的关系。
例子:
var myObj = obj();
myObj.myInnerObj = obj(myObj);
var parentObj = myObj.myInnerObj.getParent(); // parentObj = myObj
为什么你认为循环关系是一个问题?没有任何东西会自动追踪对象之间的所有链接。 – Barmar
@Barmar这是另一个很好的问题。而且我认为,从我读过的这个小角度来看,这种循环关系可能有几个潜在的问题。这是一个链接到一个页面,具体谈到为什么这可能是一件坏事。 http://programmers.stackexchange.com/questions/11856/whats-wrong-with-circular-references – usr56777
这并非天生不好,它只是有可能变坏。像编程中的许多选项一样,这取决于您如何使用它。 – Barmar