默认函数参数学习遇派生类super构造函数调用报错如何解决?
报错产生原因
这个报错是ES6类继承的强制规则触发的,和你学习默认函数参数的场景关联,大概率是你在写带默认参数的子类构造函数时,代码顺序不符合要求:
- 所有使用
extends继承父类的派生类(子类),构造函数中必须先调用super()执行父类的构造逻辑,完成this的初始化之后,才能访问this或者执行return操作 - 你在配置默认函数参数时,大概率误将依赖
this的赋值、参数校验等逻辑放在了super()调用之前,就会触发该报错
举个常见的错误写法示例:
class Base {} class Sub extends Base { // 构造函数设置了参数默认值 constructor(count = 10) { // 还没调用super就访问this,直接触发报错 this.count = count super() } }
正确的调整方式是把super()放到构造函数最顶部执行:
class Base {} class Sub extends Base { constructor(count = 10) { // 先调用super完成this初始化 super() this.count = count } }
相关内容学习方向
- 先完整学习ES6 Class类的继承规则,重点掌握
super关键字的调用要求、可使用的场景边界 - 结合默认函数参数的语法特性,明确默认参数的求值时机,避免在
super执行前调用依赖this的默认值逻辑 - 可以通过编写不同场景的类继承测试Demo,验证代码顺序对执行结果的影响,强化对规则的记忆
内容的提问来源于stack exchange,提问作者Lama's
相关产品推荐
相关产品推荐

