阅读Dr. Axel Rauschmayer's blog on ES6 classes,我知道派生类在没有提供时会有以下默认构造函数
constructor(...args) {
super(...args);
}
我也理解如果我想在构造函数中使用this
,我首先需要调用super
,否则this
将不会被初始化(抛出ReferenceError)。
constructor(width, height) {
this.width = width; // ReferenceError
super(width, height);
this.height = height; // no error thrown
...
}
以下假设是否正确? (如果没有,请你解释一下我应该明确调用super
)的条件
对于派生类,我只需要在......
时显式调用super
this
还有其他时候我应该包含对超类构造函数的调用吗?
答案 0 :(得分:6)
是的,这听起来很正确,虽然有点奇怪。规则应该是
super(…)
构造函数constructor(){}
,
这反过来会使你的班级代码不包含超级电话。 1:你不需要在明确return
一个物体的可疑边缘情况下调用它,你几乎不会这样做。
答案 1 :(得分:2)
在这些情况下,您需要在子类构造函数中调用super
:
this
在其他情况下,如果您希望运行超类构造函数,则可以调用它,但您不必这样做。
class SuperClass{
constructor() {
console.log('SuperClass');
}
}
class SubClass1 extends SuperClass {
constructor() {
console.log('SubClass1');
super();
return {};
}
}
class SubClass2 extends SuperClass {
constructor() {
console.log('SubClass2');
return {};
}
}
new SubClass1();
new SubClass2();
在决定是否应该拨打super
时,我看不出参数顺序如何重要。