super 的行为由语法位置决定:构造函数中是强制初始化,实例方法中是父类原型引用,静态方法中是父类构造器引用;用错上下文会语法报错而非运行时错误。

super 不是固定对象,它在 JavaScript 中的行为完全由当前代码所处的语法位置决定:构造函数里是初始化指令,实例方法里是父类原型引用,静态方法里是父类构造器引用。用错上下文会直接报错,不是运行时逻辑问题,而是语法层面被禁止。
构造函数中:super() 是强制初始化步骤
子类定义了 constructor 就必须第一行调用 super(),否则访问 this 会抛 ReferenceError: Must call super constructor before accessing 'this'。这是因为:
- super() 不创建新对象,而是把 new 创建的空实例作为 this,传给父类 constructor 执行初始化
- 执行完 super() 后,this 才被“激活”,才能安全赋值或返回
- 不能放在 if、try、await 或 setTimeout 里——构造过程必须同步完成
- 参数要匹配父类构造签名,否则父类内部属性可能未设置(如 this.name 为 undefined)
实例方法中:super 指向父类 prototype,查找有边界
在普通方法、getter/setter 或 async 方法里,super.xxx 是只读引用,从直接父类的 prototype 开始查找,不继续向上穿越整个原型链,也不检查父类实例属性:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- super.method() 调用时,this 仍是当前子类实例,不是父类实例
- super.xxx = val 实际等价于 this.xxx = val,赋值目标始终是子类实例自身
- 若父类 prototype 上没有该属性,super.xxx 返回 undefined(不报错),但 super.xxx() 会触发 TypeError
- 箭头函数中禁用 super——它不绑定自己的执行上下文,会继承外层或直接报错
静态方法中:super 指向父类构造函数本身
子类静态方法里的 super 相当于父类名,用于调用父类静态成员,无同步限制,也不依赖 this:
- super.staticMethod() 等价于 Parent.staticMethod(),this 在该调用中指向 Parent
- 支持多层继承:GrandChild 静态方法中 super 是 Child,不是 Parent
- 只能调用方法(super.xxx()),不能读取静态属性(super.prop 报错)、不能赋值、不能解构
- 绑定在定义时确定,与调用方式无关——哪怕通过别名调用,super 仍按类定义时的 [[Prototype]] 链解析
其他硬性限制:不是 bug,是规范约束
这些不是实现缺陷,而是语言为保障继承语义设定的语法红线:
- super 只能在 class 内部使用,不能出现在模块顶层、普通函数或对象字面量外
- 不能单独写 console.log(super) —— 必须带属性访问或调用
- super() 仅限构造函数;super.xxx 仅限方法体内部;两者不可混用或跨域
- 多层继承时,每层都必须主动写 super,漏一层就中断整条链,不会自动跳过或补全
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










