是否可以在ES6中扩展类而不用调用super方法来调用父类?
super
编辑:这个问题可能会引起误解。 这是我们必须打电话的标准,super()还是我遗漏了一些东西?
super()
例如:
class Character { constructor(){ console.log('invoke character'); } } class Hero extends Character{ constructor(){ super(); // exception thrown here when not called console.log('invoke hero'); } } var hero = new Hero();
当我不调用super()派生类时,我遇到了范围问题->this is not defined
this is not defined
我正在v2.3.0中使用iojs –harmony运行它
ES2015(ES6)类的规则基本上可以归结为:
this
这归结为ES2015规范的两个重要部分。
8.1.1.3.4节定义了决定this功能的逻辑。类的重要部分是有可能this处于一种"uninitialized"状态,当处于这种状态时,尝试使用this将引发异常。
"uninitialized"
节9.2.2,[[Construct]],它定义的通过被称为功能的行为new或super。调用基类构造函数时,this在的步骤#8进行了初始化[[Construct]],但对于所有其他情况,this都未初始化。在构造结束时,GetThisBinding将调用,因此,如果super尚未调用(因此初始化this),或者未返回显式替换对象,则构造函数调用的最后一行将引发异常。
[[Construct]]
new
GetThisBinding