javascript子类构造函数中若显式定义constructor却未在首行调用super(),会立即抛出referenceerror错误;super()必须是首条可执行语句,负责初始化实例、设置原型链和激活this绑定。

子类构造函数中没调用 super(),在 JavaScript 中会直接报错,无法创建实例——这不是警告,而是运行时阻断性错误。
立即抛出 ReferenceError
只要子类显式定义了 constructor,但里面没写 super()(或写晚了、写错了位置),执行 new Sub() 时就会立刻中断,并提示:
这个错误不是后期逻辑异常,而是在构造函数刚进入、this 还未绑定时就触发,连日志都打不出来。
this 根本不可用
super() 不只是“调父类逻辑”,它负责三件事:初始化实例内部槽位、设置 [[Prototype]] 链、正式激活 this 绑定。没调 super() 前:
- 任何
this.xxx = ...都报错 - 哪怕只写
console.log(this)也会崩溃 -
return this或return {}同样不被允许
看似空的构造函数也危险
下面这些写法全都会报错:
-
class B extends A { constructor() {} }(空函数体,没 super) -
constructor() { this.name = 'x'; super(); }(super 在 this 之后) -
constructor() { return; super(); }(return 提前终止)
正确姿势只有一条:super() 必须是构造函数中第一个可执行语句(注释和变量声明除外)。
不写 constructor 反而安全
如果子类完全不定义 constructor,JavaScript 引擎会自动插入默认逻辑:constructor(...args) { super(...args); }。这种情况下不会出错,也不需要你操心。
但一旦你写了 constructor,不管有没有用到 this,都必须手动加 super()——这是语法强制,没有例外。











