1

我有这个看起来像这样的基本组件类

class Component {
    constructor() {
        this.manager = null;
    }
    behavior(){
        //some behavior
    }
}

我希望 GameObject 的实例通过执行类似的操作来动态继承该行为

var myGameObject = new GameObject();
myGameObject.attach(myComponent);

这样我就可以轻松做到

myGameObject.behavior();

这可以通过 ES6 实现吗?如果不是,我还有什么其他选择?

4

1 回答 1

0

我确实找到了一种方法来做到这一点,但不确定这是否只是不好的做法

attach(component){
   Object.assign(this,component);
   while (component = Reflect.getPrototypeOf(component)) {
     if(component == Object.prototype) break; // no need to redefine Object
     let keys = Reflect.ownKeys(component)
     for(var i=1;i<keys.length;i++){
       Reflect.getPrototypeOf(this)[keys[i]] = component[keys[i]];
     }
   }
   return this;
}
于 2017-03-10T08:26:28.967 回答