Динамическое присоединение методов объекта 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;
}