箭头函数不能使用 super 是因其无独立词法环境,不绑定 this/super,故语法解析阶段即报错;需改用普通函数或提前在普通方法中调用 super。

箭头函数中不能使用 super 关键字,这不是限制,而是由它的语言设计决定的。
箭头函数没有自己的词法环境
super 的解析依赖于函数是否拥有独立的词法绑定上下文。普通方法(包括构造函数、实例方法、静态方法)在定义时会建立自己的 [[HomeObject]] 和 this/super 绑定;而箭头函数不创建新的词法环境,它直接继承外层函数的作用域。
- 如果外层不是类方法,就没有 super 可继承,此时使用 super 会直接报
SyntaxError - 即使外层是类方法,箭头函数里的 super 也指向外层函数绑定的父类,而不是“当前类”的父类——这会造成语义错乱
- 引擎在语法解析阶段就禁止在箭头函数体中出现 super,不等到运行时
super 与 this 是强绑定的语法对
super 在构造函数中对应父类初始化,在实例方法中对应父类 prototype,在静态方法中对应父类构造器——这些都以函数自身的 this 绑定为前提。箭头函数没有自己的 this,自然也无法定义对应的 super 行为。
- 它连 arguments、new.target 都不支持,super 属于同一批被排除的“上下文敏感关键字”
- 试图用箭头函数替代类方法(比如事件回调里写
() => super.handleClick())会失败,必须改用普通函数或显式绑定
替代方案很直接
需要在回调中调用父类逻辑时,不要把 super 放进箭头函数,而是把调用提前到普通方法里,再传给箭头函数:
立即学习“Java免费学习笔记(深入)”;
- 写成
onClick={() => this.handleParentClick()},然后在handleParentClick()这个普通方法里用super.handleClick() - 或者用
bind或 class 字段语法(handleClick = () => { ... })确保方法是普通函数


















