【发布时间】:2016-12-27 19:16:34
【问题描述】:
阅读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 - 超类构造函数与派生类构造函数需要不同的参数
还有其他时候我应该包含对超类构造函数的调用吗?
【问题讨论】:
-
不,没有。你想为那个陈述提供什么样的“证据”?
-
当你创建一个像
class ABC extends DEF { ...这样的类时,你必须输入super(...args);,因为你刚刚用extends DEF声明你想从它派生。如果你不是从任何类派生的,那么就不要在 ABC 的构造函数中放入“super”。就是这么简单。 -
@Azamantes:如果父类采用与子类相同的参数,则无需调用
super。 -
如果派生类确实定义了构造函数怎么办?然后我需要包括对超级的明确调用吗?换句话说,对 super 的默认调用是否仅作为默认构造函数的一部分包含在内? (不确定这里的用例,只是想考虑边缘情况)
-
@sfletche 是的,所有构造函数都没有“默认
super调用”,它只是默认构造函数的一部分。
标签: javascript ecmascript-6 es6-class