语法错误: 设置器函数必须有一个参数
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();
},
};