在 JavaScript 类继承中,子类 constructor 必须第一行调用 super() 初始化 this,否则访问 this 会报错;super() 参数需与父类构造函数匹配;super 还可用于子类方法中调用父类同名方法或静态方法。

在 JavaScript 类继承中,调用超类(父类)构造函数初始化的唯一标准方式是:在子类 constructor 的**第一行**使用 super()。
为什么必须用 super()?
子类构造函数中不会自动创建合法的 this。JavaScript 引擎要求先执行父类构造函数来完成实例的基本初始化,super() 就是触发这一过程的关键。跳过或延迟调用,哪怕只是读取 this.name,都会立即报错:
ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
怎么传参给超类构造函数?
把父类构造函数需要的参数直接传给 super():
- 父类定义为
constructor(name, age)→ 子类写super(name, age) - 父类构造函数无参或有默认值 → 可写
super(),也可省略参数 - 不能只传部分参数,否则父类逻辑可能不完整(如未初始化某属性)
常见错误写法
-
console.log(this.name); super();→ 报错,this访问在super()前 -
super(); this.name = "child";→ 正确,super()在首行 -
if (condition) super();→ 报错,super()必须无条件、无分支地出现在第一行
super 还能干别的事吗?
可以,但仅限于方法调用场景:
- 在子类普通方法里(如
speak()),可用super.speak()调用父类同名方法 - 在 getter/setter 中也可用
super.xxx访问父类对应成员 - 静态方法中
super指向父类本身,可用于调用父类静态方法 - 注意:这些都不替代构造函数里的
super(),两者用途完全不同

















