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;
}
这一天的教训是:“不要在黄昏与逻辑问题作斗争,让夜晚过去吧。”:)