SyntaxError: use of super property/member accesses only valid within methods or eval code within methods

當在方法外部使用 super.xsuper[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;
  },
};

另見