ES6类中调用super()出现SyntaxError: 'super' keyword unexpected here错误求助
问题解答
错误原因
你在子类Bar的go方法里直接写super()属于语法错误,核心规则是:
super()仅能在子类的constructor构造函数内部调用,作用是触发父类的构造逻辑,完成父类部分的初始化。- 在普通实例方法(比如这里的
go)中,要调用父类的同名方法,必须写成super.方法名()的形式。
修复后的代码
class Foo { go() { console.log('Foo.go'); } } class Bar extends Foo { go() { console.log('Bar.go'); super.go(); // 正确调用父类的go方法 } } // 测试执行 const bar = new Bar(); bar.go(); // 输出顺序: // Bar.go // Foo.go
补充说明
如果子类需要自定义构造函数,必须在构造函数内先调用super(),之后才能使用this关键字,否则会抛出错误:
class Bar extends Foo { constructor() { super(); // 必须先执行这一步 this.customProp = '自定义属性'; } }
内容的提问来源于stack exchange,提问作者Phrogz
相关产品推荐
相关产品推荐

