super 在 javascript 中严格按单步向上、逐层委托规则运行:每层 super 仅对接直接父级,构造函数和方法中均需每层显式调用,漏写即中断链,且箭头函数中禁止使用。

super 在 JavaScript 继承链中不是“一键调到底”,而是严格按**单步向上、逐层委托**的规则运行:每层 super 只负责对接紧邻上一级,不跳过、不跨层、不自动聚合。是否连通整条链,取决于每一层是否主动参与。
构造函数中 super() 必须逐层显式调用
子类实例化时,super() 触发父类 constructor 执行,但仅限直接父类;若该父类自身也是子类,它必须也写 super(),才能继续向上触发更上层构造器:
- C 的 constructor 中 super() → 执行 B 的 constructor
- B 的 constructor 中必须含 super() → 才会执行 A 的 constructor
- 若 B 漏写 super(),A 完全不会运行,链在 B 处中断
- this 始终是 new C() 创建的实例,所有父类构造器都在这个实例上初始化属性
实例方法中 super.xxx 只查直接父类 prototype
在普通方法(非 static)里,super 不是通用查找器,它只从**直接父类的 prototype** 开始找,不穿透多层:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- C.prototype.foo() 写 super.foo() → 查 B.prototype.foo
- 若 B.prototype.foo 不存在,结果就是 undefined,不会继续查 A.prototype.foo
- 只有 B.prototype.foo 内部也写了 super.foo(),才会轮到 A.prototype.foo
- 赋值操作 super.x = val 实际等价于 this.x = val,永远修改子类实例,不改父类原型
静态方法中 super 指向父类构造函数本身
静态上下文中的 super 与实例上下文分离,它指向父类构造函数(即 Parent),用于访问静态成员:
- C.info() 中 super.info() → 调用 B.info()
- B.info() 若也写 super.info() → 才调用 A.info()
- 这条静态链依赖类构造函数的 [[Prototype]] 关系:C.[[Prototype]] === B,B.[[Prototype]] === A
- 静态方法无法通过 super 访问实例方法,反之亦然
漏写 super 就断链,没有自动兜底
super 的可靠性完全由开发者手动保障,引擎不做补偿:
- 某一层 constructor 没写 super() → 整个初始化链卡死,后续父类逻辑彻底丢失
- 某一层方法里忘了 super.xxx() → 该层级增强或前置逻辑就失效,不会被“下一层补上”
- 不能靠“最底层一个 super 调完全部”,必须每层各写各的、各负其责
- 箭头函数中禁止使用 super,因其无独立词法环境,无法解析绑定
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










