Динамическое присоединение методов объекта ES6 от одного объекта к другому

У меня есть этот базовый класс компонентов, который выглядит следующим образом

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

Я хочу, чтобы экземпляр GameObject динамически наследовал это поведение, делая что-то вроде

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

так что я могу легко сделать

myGameObject.behavior();

Это возможно через ES6? если нет, какие у меня есть альтернативы?

1 ответ

Решение

Я нашел способ сделать это, но не уверен, что это просто плохая практика

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;
}
Другие вопросы по тегам