es6中super不能用于私有方法,因私有方法是es13引入且与super不兼容;私有方法不参与原型链,super无意义;复用逻辑应提取至公有/受保护方法后通过super调用。

ES6 的 super 关键字在私有方法中**不能直接使用**——因为 ES6 标准本身**不支持私有方法语法**,私有方法(如 #method())是 ECMAScript 2022(ES13)才正式引入的特性,而它与 super 的配合有明确限制。
私有方法里不能写 super 调用
在类的私有方法内部,super 是语法错误。JavaScript 引擎会报 SyntaxError: 'super' keyword unexpected here 或类似提示。
- 私有方法属于当前类的封闭作用域,不参与原型链查找,
super所依赖的“父类原型对象”在私有上下文中无意义 - 即使父类定义了同名私有方法(如
#foo()),子类的#foo()也是完全独立的,不存在继承或覆盖关系 - 尝试
super.#foo()会直接报错 —— 私有字段访问语法(#)和super不兼容
想复用父类逻辑?用公有/受保护的中间层
若需在子类中调用父类的对应行为,应将该逻辑提取到一个**公有或受保护命名的普通方法**(即非私有),再通过 super.methodName() 调用:
- 父类把核心逻辑放在公有方法(如
validate())或下划线前缀的约定方法(如_doInit())中 - 子类私有方法中调用
super.validate(),合法且可正常绑定this - 避免把业务关键逻辑锁死在私有方法里,否则子类无法复用或扩展
静态私有方法中 super 同样不可用
静态私有方法(static #helper())中也不能使用 super:
-
super在静态方法中指向父类构造器,但私有静态方法无法通过super访问父类的任何静态成员(包括私有和公有) - 若需跨类共享静态逻辑,建议用顶层函数、工具类或导出的辅助函数,而非依赖继承链
替代方案:组合优于继承 + 显式委托
面对私有逻辑复用需求,更现代的做法是减少对 super 的依赖:
- 把可复用能力封装为独立函数或类,由子类实例持有并调用(组合)
- 用
Reflect.getPrototypeOf(this)手动获取父类原型后调用方法(仅限公有方法,且需确保非私有) - 避免设计“必须靠
super调私有方法才能工作”的继承结构,这本身违反封装原则











