我有一些正在制作的用于游戏计算器的建筑对象。每个建筑对象都有一个需求数组,因此您可以轻松访问给定级别的需求。
问题在于,许多建筑物是它们所需要的建筑物的要求(在不同级别上)。正如我发现的那样,如果建筑物B在其静态需求数组中具有建筑物B,则建筑物B不能在其静态需求数组中包含建筑物B。
例如:
export class Walls implements Building {
static requirements = [null, [new Keep(1)], [null], [null], [null],
[null], [null], [null], [null], [null],
[null], [null], [null], [null], [null],
[null], [null], [null], [null], [null],
[null], [null], [null], [null], [null]
];
...
将返回错误
TypeError:Keep_1.Keep不是构造函数
如果Keep具有以下内容:
导出类Keep执行建筑物{
static requirements = [null, [new Walls(1)], [new Walls(2)], [new Walls(3)], [new Walls(4)],
[new Walls(5)], [new Walls(6)], [new Walls(7)], [new Walls(8)], [new Walls(9)],
[new Walls(10)], [new Walls(11)], [new Walls(12)], [new Walls(13)], [new Walls(14)],
[new Walls(15)], [new Walls(16)], [new Walls(17)], [new Walls(18)], [new Walls(19)],
[new Walls(20)], [new Walls(21)], [new Walls(22)], [new Walls(23)], [new Walls(24)]
];
...
有什么办法解决吗?
答案 0 :(得分:2)
正确的是,首先加载哪个类都将尝试实例化另一个尚不存在的类。您可以移动代码以将每个类的requirements
初始化为该类的静态方法,并在加载所有类后一次调用所有这些方法。或者,每个类都可以具有静态的getRequirements
方法,该方法会在第一次调用requirements
时初始化该字段,只要没有调用getRequirements
,直到所有类加载完毕,没事的;这样,您不必手动调用初始化过程。