super是javascript中子类调用父类构造函数或方法的关键字,必须在子类constructor中this前调用super()以初始化实例上下文,支持传参、方法复用与扩展、静态方法调用,但受限于上下文(如不可在箭头函数中使用)。

在 JavaScript 中,super 关键字用于在子类中调用父类的构造函数或方法,是实现逻辑复用与扩展的核心机制。它不是简单地“复制”父类行为,而是让子类能在保留父类原有逻辑的基础上,安全地添加、修改或增强功能。
在构造函数中调用 super() 是必须的
子类定义了自己的 constructor 时,必须在使用 this 前调用 super(),否则会报错。这是因为 super() 负责初始化父类的实例上下文(如设置 this 指向和继承原型链)。
- 不调用
super()→ 报错ReferenceError: Must call super constructor in derived class before accessing 'this' -
super()必须在this之前调用,哪怕只是写一行console.log也不行 - 可以向
super()传参,这些参数会传递给父类构造函数,用于初始化父类状态
用 super.methodName() 复用并扩展父类方法
在子类方法中通过 super.xxx() 显式调用父类同名方法,可以在执行父逻辑后追加新行为,或在执行前做预处理,从而实现“环绕增强”。
- 适合场景:日志记录、权限校验、数据预处理、结果后处理等
- 注意:不能在箭头函数或静态方法中用
super访问实例方法(因为没有绑定this) - 示例:子类
save()先校验再调用父类保存逻辑,最后触发通知
覆盖父类方法时,super 提供可控的调用入口
覆盖不是替代,而是“有选择地重用”。即使重写了某个方法,仍可通过 super 精准调用父版本,避免重复实现或遗漏关键逻辑。
- 避免直接复制父类代码——易出错且难维护
- 若父类方法被重构(如增加参数或校验),子类只需确保
super()调用兼容,无需重写全部逻辑 - 可在不同分支中按需调用
super,比如仅在特定条件下执行父逻辑
静态方法中也能用 super,但限制更严格
子类静态方法可通过 super.staticMethod() 调用父类静态方法,前提是该方法确实存在于父类上,且调用发生在静态上下文中。
- 静态方法中的
super指向父类本身(而非实例),所以只能访问静态属性/方法 - 不能在静态方法里访问
this实例属性,也不能用super调用实例方法 - 常见用途:工厂方法扩展、配置合并、类型检查委托等
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











