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

另见