Javascript 如何浏览继承系统?
我正在创建一个实体/组件系统,但在创建一个可以基于继承组件选择实体的函数时遇到了一些问题。让我们举一个例子:Javascript 如何浏览继承系统?,javascript,inheritance,components,entity,Javascript,Inheritance,Components,Entity,我正在创建一个实体/组件系统,但在创建一个可以基于继承组件选择实体的函数时遇到了一些问题。让我们举一个例子: Animal (1) Dog (2) Doberman (3) Rottweiler (3) Cat (2) Siamese (3) Persian (3) 如果您不熟悉实体组件系统,假设我想要一只名为“Rex”的杜宾犬,我会这样做: let Rex: Entity = createEntity("Dobe
Animal (1)
Dog (2)
Doberman (3)
Rottweiler (3)
Cat (2)
Siamese (3)
Persian (3)
如果您不熟悉实体组件系统,假设我想要一只名为“Rex”的杜宾犬,我会这样做:
let Rex: Entity = createEntity("Doberman");
杜宾组件延伸到狗,狗延伸到动物。因此,Rex接收所有这三个组件的属性
现在,当我想选择所有具有动物组件的实体(即“selectEntities(Animal)”)时,我还想选择狗、猫、杜宾等,换句话说:所有继承的组件。这就是我被卡住的地方,因为它必须是动态的,并且考虑到任何继承的组件链,不管其中有多少层。在我的第一个版本中,组件只能由另一个组件继承,这使得简单循环成为浏览所有实体的简单解决方案
现在,一个特定的组件仍然只能扩展到另一个组件(狗到动物),但它可以扩展到无限多个组件(来自杜宾犬和罗特韦尔犬的狗)。我不知道如何从父级获取所有组件。仅通过重叠/联锁回路是否可行
谢谢。我误解了原来的问题。问题应该是“如何迭代嵌套对象?”,这有一个简单的解决方案:递归调用 所以我们可以这样做:
public getInheritedComponents(component: string) : object {
let inheritees: object = {};
let current : Component = this.getComponent(component);
for (let inheritee in current.inherited) {
inheritees[inheritee] = current.inherited[inheritee];
let subinheritees = this.getInheritedComponents(inheritee);
for (let subinheritee in subinheritees) {
inheritees[subinheritee] = subinheritees[subinheritee];
}
}
return inheritees;
}
这一天的教训是:“不要在黄昏与逻辑问题作斗争,让夜晚过去吧。”:)