语法错误: 设置器函数必须有一个参数

JavaScript 异常 "setter 函数必须有一个参数" 发生在声明 setter 时,参数列表不包含恰好一个正式参数。

消息

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)

错误类型

出了什么问题?

The set 属性语法看起来像一个函数,但它更严格,并非所有函数语法都允许。setter 总是被精确地调用一个参数,因此用任何其他数量的参数定义它很可能是一个错误。这个参数可以 解构 或者有 默认值,但它不能是 rest 参数.

注意,此错误仅适用于使用 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();
  },
};

另请参阅