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();
},
};