ECMAScript 6(Harmony)引入classes了从另一个继承的能力.假设我有一个游戏和一些基本类来描述机器人行为的基本内容.我简化了我的真实架构,但假设我需要运行render另一个例程,我将这些调用放在基本Bot类中.
class Bot{
constructor(){
render();
}
render(){}
}
Run Code Online (Sandbox Code Playgroud)
每个机器人然后覆盖它的render功能,并可以在构造函数中进行一些设置:
class DevilBot extends Bot{
constructor(){
super();
this.color = 0xB4D333;
}
render(){
createSomeMesh(this.color);
}
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是在我打电话之前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);
}
}
Run Code Online (Sandbox Code Playgroud)
但这种方法有多好,什么是解决这种问题的首选方法?