You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript类方法中单独使用super关键字为何会报错

问题结论

这个现象是JavaScript的明确语法设计规则,不属于语法怪癖。

规则说明

ECMAScript语言规范从没有将super定义为可以独立使用、返回对象引用的普通表达式,它是专门为类继承场景设计的特殊语法标记,仅支持两类合法语法形式:

  • 构造函数内的函数调用形式:super(/* 可选参数 */),作用是调用父类构造函数完成实例初始化,该形式必须紧跟调用括号
  • 属性/方法访问形式:super.属性名 或者 super[表达式],作用是访问当前方法所绑定HomeObject的原型上的成员,该形式必须紧跟属性访问标记

单独书写super时,不存在对应的语义定义——规范从未规定独立出现的super应该返回什么值,JS解析器会在语法分析阶段直接判定为非法,抛出invalid use of keyword 'super'的语法错误,代码根本不会进入执行阶段。

示例中使用的super.constructor完全符合第二类合法语法规则:bar方法的HomeObject是Foo.prototype,其原型为Object.prototype,Object.prototype.constructor默认指向Object构造函数,因此代码可以正常执行,输出结果完全符合规范预期。

验证代码
class Foo {
    constructor() {
        this.bar();
    }

    bar() {
        /*
          console.log(super); 
          会抛出如下SyntaxError:
          Uncaught SyntaxError: invalid use of keyword 'super'
          并不会打印HomeObject(即Foo.prototype)的原型(本例中为Object.prototype)
        */
        console.log(super.constructor);
        // 此处运行无异常,会打印Object构造函数
    }
}
new Foo

内容的提问来源于stack exchange,提问作者Slev7n

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 09:42:24