You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

未显式定义构造函数的ES6子类的默认构造器机制是什么?

ES6子类未指定构造函数时的默认构造行为

当ES6子类未显式定义构造函数时,子类的构造器和父类构造器并不相同,但实例化子类时所有参数会被传入父类构造器,测试代码如下:

class SuperClass {
  constructor(arg1, arg2, arg3) {
    console.log(arg1, arg2, arg3);
  }
}

class SubClass extends SuperClass {}

console.log(
  "Is the subclass constructor the same as the superclass?",
  SubClass.prototype.constructor === SuperClass.prototype.constructor
); // false

new SubClass(1, 2, 3); // 1 2 3

问题

JavaScript会在子类未指定构造函数时添加默认构造实现吗?猜测它会添加如下构造器:

constructor(...args) {
  super(...args);
}

但对此不确定,也找不到权威资料佐证。

回答

是的,JavaScript规范明确规定,未显式定义构造函数的子类会自动获得默认构造器,其行为完全等同于你猜测的代码:

constructor(...args) {
  super(...args);
}

这个默认构造器会接收实例化时传入的所有参数,并原封不动地传递给父类的构造函数super()。另外,子类的prototype.constructor属性会指向子类自身,这也是测试代码中两者构造器比较结果为false的原因。

内容的提问来源于stack exchange,提问作者Guerric P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 06:42:40