Вызов родительского конструктора переопределяет функции до завершения всех дочерних конструкторов
ECMAScript 6 (Гармония) вводитclasses
со способностью наследовать одно от другого. Предположим, у меня есть игра и некоторый базовый класс, чтобы описать основные вещи для поведения бота. Я упрощаю свою настоящую архитектуру, но предположим, что мне нужно запуститьrender
и некоторые другие рутины, и я ставлю эти вызовы в основномBot
учебный класс.
class Bot{
constructor(){
render();
}
render(){}
}
Каждый бот затем отменяет этоrender
Функция и может иметь некоторые настройки в конструкторе:
class DevilBot extends Bot{
constructor(){
super();
this.color = 0xB4D333;
}
render(){
createSomeMesh(this.color);
}
}
Проблема в том, что прежде чем я позвонюsuper()
- this
не существует. Ноsuper
(родительский конструктор) вызовет переопределенныйrender
что понадобитсяcolor
переменная, определенная в дочернем конструкторе. Я могу предположить в родительском конструкторе, что дочерний объект будет реализовывать некоторыеinit
Функция со всеми необходимыми настройками и вызвать его:
class Bot{
constructor(){
if (this.init) this.init();
render();
}
render(){}
}
class DevilBot extends Bot{
init(){
this.color = 0xB4D333;
}
render(){
createSomeMesh(this.color);
}
}
Но насколько хорош этот подход и каков предпочтительный способ решения такой проблемы?