对我来说,编码很多是关于清晰度和概述。因此,我很乐意调用在类的构造函数中尚未分配的对象。听起来像一个愚蠢的想法所以这里有一个例子(反正可能是愚蠢的):
// this doesn't work but looks clear
SomeClass a = new SomeClass(b, c);
SomeClass b = new SomeClass(a, c);
SomeClass c = new SomeClass(a, b);
// this functions but has bad overview:
SomeClass a = new SomeClass(null, null);
SomeClass b = new SomeClass(a, null);
SomeClass c = new SomeClass(a, b);
a.first = b;
a.snd = c;
b.snd = c;
底部有一个更好的方法吗?
对此的需求随着半边数据结构的实现而增加,其中边缘对象存储对另一个边缘对象的prev和下一个引用。我认为循环引用不是很好,但是例如列表也对每个下一个项目都有这样的参考。
答案 0 :(得分:4)
不是在构造函数中指定边,而是在单独的方法中执行:
jQuery(window).resize(debounce(function(){
resizeGrid([gridObj1, gridObj2]);
}));
这看起来更具可读性。您可能需要添加一些保护机制以防止在分配边缘之前使用该类;但如果您在构造函数中接受空值,情况也是如此。
答案 1 :(得分:2)
这只是第一个想法,但我认为主要方法应该是将类创建与定义它们的关系分开。
也许这样的事情会起作用(不确定你的确切关系):
void Connect(SomeClass a, SomeClass b) {
a.first = b;
b.snd = a;
}
并使用它:
SomeClass a = new SomeClass();
SomeClass b = new SomeClass();
SomeClass c = new SomeClass();
Connect(a, b);
Connect(a, c);
Connect(c, b);
(那种设计仍然不完美,但至少要说清楚恕我直言会发生什么)
答案 2 :(得分:0)
不幸的是,没有办法实现这一点,因为它是循环依赖。
这不合适,你必须用其他东西替换一个项目。步行去,不需要钱!
交换2个变量的值时遇到同样的问题:
var a = 5;
var b = 2;
var tempvar = a;
a = b;
b = tempvar;
您必须摆脱依赖关系或在初始化后绑定它们。这是一个逻辑问题,没有编程问题。