在子对象中创建对父对象的引用是否会导致循环关系
Does creating a reference to parent object within the child object cause a cyclic relationship?
我知道获取当前对象的父对象是一个古老的话题,但是,我对解决此问题的解决方案有疑问。我找到的大多数答案都说简单地在设置为父对象的子对象中创建一个属性。如果在子对象中创建对父对象的引用会创建循环关系,那么这怎么可能是一个有效的解决方案呢?下面是说明此解决方案的示例 -
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
简单地回答,是的,它确实会导致循环关系。但是,这无论如何都不是问题。只要你不编写一个试图无限爬取这些对象的函数,这种模式就没有问题。
这方面的一个例子是Backbone.js,它包含由模型组成的集合。每个模型都有一个对集合的引用,其中包含其中的模型等。
这在实践中非常有效。
相关文章:
- 如何检查数组中的对象是否等于选项值
- 测试对象是否相等和/或对象是否有更多的关键点,但仍然与共同的关键点相等
- 确定javascript中的html表对象是否具有<colgroup>是否
- 验证对象是否为null Javascript/Angularjs
- 如何通过json对象选项卡中的Id来检查对象是否存在
- jQuery-检测选择对象是否添加或删除了选项
- 检查对象是否是mongo游标
- Three.js-如何检查对象是否在球体后面(不可见)
- 检查对象是否基于jquery对象
- 在JSON项上循环,无论JSON对象是否具有多个数组
- 递归Javascript对象是否会导致任何问题(内存泄漏)
- Javascript如何确定两个对象是否相同
- 如何检查文字对象是否在 Javascript 数组中
- 检查对象是否已被推入数组 Js
- 变量/对象是否按值传递,为什么我不能在 javascript 中使用变量更改对象的属性
- JavaScript 如何检查包含数组的对象是否为空
- 嵌套对象是否被视为良好做法
- 在node.js/ssocket.io中,如何判断对象是否是套接字的实例
- 是否有跨浏览器和跨框架的方法来检查对象是否是HTML元素
- 有没有办法检查一个对象是否存在并且在一行中有一个子对象