为什么需要在子类中引用基类的构造函数?无论哪种方式,我似乎都能得到相同的结果。
class Animal {
constructor(age) {
this.age = age;
}
}
class Mammal extends Animal {}
let lion = new Mammal(3);
lion.age //=> 3
相对于
class Mammal extends Animal {
constructor(){
super(3)
}
}
let lion = new Mammal();
lion.age //=> 3
如果您不提供显式构造函数,则在子类1中,JavaScript引擎将为您生成一个类似以下内容的构造器:
constructor(...args) {
super(...args);
}
这就是您的第一个示例中发生的事情。所以这:
class Mammal extends Animal {
}
与此相同:
class Mammal extends Animal {
constructor(...args) {
super(...args);
}
}
...只是第二个是显式的,而第一个是使用JavaScript引擎为您插入类中的构造函数。
这在§14.5.14:运行时语义:ClassDefinitionEvaluation的步骤10中定义:
如果构造函数为空,则
如果存在ClassHeritage opt,则
让构造函数成为解析源文本的结果
constructor(... args){ super (...args);}
使用语法语法和目标符号MethodDefinition。
别的,
让构造函数成为解析源文本的结果
constructor( ){ }
使用语法语法和目标符号MethodDefinition。
1如上所示,如果它不是子类,则为constructor() { }
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句