必须调用super(),因为子类this绑定依赖父类构造函数执行;super()前this未初始化,访问会报referenceerror;须首条语句调用并传参,否则报错或逻辑异常。

在 JavaScript 中,构造函数通过 super() 调用父类构造函数,这是 ES6 类语法的强制要求——子类构造函数中必须显式调用 super(),否则会报错。
为什么必须调用 super()?
子类的 this 绑定依赖于父类构造函数的执行。ES6 类中,子类构造函数在调用 super() 前,this 是未初始化的(处于“暂时性死区”),直接访问或返回 this 会抛出 ReferenceError。
正确调用 super() 的方式
- 必须在子类构造函数中第一条有效语句(或至少在访问
this之前)调用super() - 需传入父类构造函数所需的参数,例如:
super(name, age) - 若父类构造函数无参,仍需写
super(),不能省略
常见错误示例
❌ 错误:没调用 super()class Child extends Parent { constructor() { /* 忘了 super() */ } } → 报错:Must call super constructor in derived class before accessing 'this' or returning from derived constructor
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
❌ 错误:super() 在 this 之后class Child extends Parent { constructor() { console.log(this); super(); } } → 报错:同上(this 提前访问)
❌ 错误:super() 传参不匹配
若 Parent 构造函数期望两个参数,但 super('Alice') 只传一个 → 父类内部可能得到 undefined,逻辑出错(但不会语法报错)
与原型链继承(非 class)的区别
在传统函数构造器 + Object.setPrototypeOf 或 Object.create 方式中,没有 super 机制,需手动用 Parent.call(this, ...) 调用父构造函数。这种方式不强制、不校验 this 初始化,但容易遗漏或出错,且无法自动建立正确的 [[Prototype]] 链(需额外设置)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










