SyntaxError: super 属性/成员访问仅在方法或方法内部的 eval 代码中有效
当在方法之外使用 super.x
或 super[x]
语法时,会发生 JavaScript 异常“super 属性/成员访问仅在方法或方法内的 eval 代码中有效”。
消息
SyntaxError: 'super' keyword unexpected here (V8-based) SyntaxError: use of super property accesses only valid within methods or eval code within methods (Firefox) SyntaxError: super is not valid in this context. (Safari)
错误类型
哪里出错了?
示例
无效情况
不能在对象的方法之外使用 super.x
js
const obj = {
__proto__: { x: 1 },
x: super.x, // SyntaxError
};
不能在函数中使用 super.x
,即使该函数具有作为方法的效果
js
function getX() {
return super.x; // SyntaxError
}
const obj = {
getX,
getX2: function () {
return super.x; // SyntaxError
},
};
class Derived extends Base {
getX = () => super.x;
}
有效情况
可以在方法中使用 super.x
js
class Base {
x = 1;
}
class Derived extends Base {
getX() {
return super.x;
}
}
可以在字段初始化器中使用 super.x
js
class Derived extends Base {
x = super.x;
}
也可以在对象方法中使用 super.x
js
const obj = {
__proto__: { x: 1 },
getX() {
return super.x;
},
};