[英]When do I need to call `super` from a constructor?
阅读Axel Rauschmayer博士关于ES6课程的博客 ,我知道派生类在没有提供时会有以下默认构造函数
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
还有其他时候我应该包含对超类构造函数的调用吗?
是的,这听起来是正确的,虽然有点奇怪的表述。 规则应该是
super(…)
构造函数 constructor(){}
,这反过来会使你的类代码不包含超级调用。 1:您不需要在明确return
对象的可疑边缘情况下调用它,这是您几乎不会想到的。
在这些情况下,您需要在子类构造函数中调用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
与否。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.