父构造函数在所有子构造函数完成之前调用覆盖函数

时间:2015-09-08 05:29:47

标签: javascript ecmascript-6 javascript-objects

ECMAScript 6(Harmony)介绍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);
  }
}

但这种方法有多好,什么是解决这种问题的首选方式?

0 个答案:

没有答案