SyntaxError: use of super property/member accesses only valid within methods or eval code within methods
當在方法外部使用 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)
錯誤型別
SyntaxError
哪裡出錯了?
super.x 語法用於訪問當前物件的原型上的屬性。它可以在物件字面量和類的方法、欄位初始化器和靜態初始化塊中使用,但不能在其他上下文中。
示例
無效案例
不能在物件的方法外部使用 super.x
js
const obj = {
__proto__: { x: 1 },
x: super.x, // SyntaxError: use of super property accesses only valid within methods or eval code within methods
};
不能在函式中使用 super.x,即使該函式具有方法的效用
js
function getX() {
return super.x; // SyntaxError: use of super property accesses only valid within methods or eval code within methods
}
const obj = {
getX,
getX2: function () {
return super.x; // SyntaxError: use of super property accesses only valid within methods or eval code within methods
},
};
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;
},
};