SyntaxError: setter functions must have one argument

當聲明瞭一個 setter,但其引數列表不包含恰好一個形式引數時,會發生 JavaScript 異常 "setter functions must have one argument"。

訊息

SyntaxError: Setter must have exactly one formal parameter. (V8-based)
SyntaxError: Setter function argument must not be a rest parameter (V8-based)
SyntaxError: setter functions must have one argument (Firefox)
SyntaxError: Unexpected token ','. setter functions must have one parameter. (Safari)
SyntaxError: Unexpected token '...'. Expected a parameter pattern or a ')' in parameter list. (Safari)

錯誤型別

SyntaxError

哪裡出錯了?

set 屬性語法看起來像一個函式,但它更嚴格,並非所有函式語法都被允許。setter 總是以恰好一個引數呼叫,因此將其定義為其他數量的引數很可能是一個錯誤。此引數可以是解構的,也可以具有預設值,但它不能是剩餘引數

請注意,此錯誤僅適用於使用 set 語法的屬性 setter。如果你使用 Object.defineProperty() 等方式定義 setter,則 setter 被定義為普通函式,儘管如果 setter 期望其他數量的引數,這仍然可能是一個錯誤,因為它將以恰好一個引數呼叫。

示例

無效案例

js
const obj = {
  set value() {
    this._value = Math.random();
  },
};

有效情況

js
// You must declare one parameter, even if you don't use it
const obj = {
  set value(_ignored) {
    this._value = Math.random();
  },
};

// You can also declare a normal method instead
const obj = {
  setValue() {
    this._value = Math.random();
  },
};

另見