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