Javascript 未捕获的SyntaxError:Setter必须只有一个形式参数
我试图理解JS上的getter和setter,但我似乎无法通过这个错误。有人能提供我为什么会出现这个错误的见解吗Javascript 未捕获的SyntaxError:Setter必须只有一个形式参数,javascript,setter,Javascript,Setter,我试图理解JS上的getter和setter,但我似乎无法通过这个错误。有人能提供我为什么会出现这个错误的见解吗 var book = { year: 2004, edition:1, get newYear(){ return "Hello, it's " + this.year; }, set newYear(y, e){ this.year = y; this.edition = e; } };
var book = {
year: 2004,
edition:1,
get newYear(){
return "Hello, it's " + this.year;
},
set newYear(y, e){
this.year = y;
this.edition = e;
}
};
未捕获的SyntaxError:Setter必须只有一个形式参数
setter函数是在执行以下操作时隐式调用的函数:
someObject.property = 25;
因为赋值操作只涉及赋值一个值,所以setter函数必须只有一个参数。无论如何,它只能用一个参数调用(通过隐式赋值机制),因此两个参数设置器没有什么意义
在您的情况下,您可以让setter获取单个对象并从中获取两个值:
var book = {
year: 2004,
edition:1,
get newYear(){
return "Hello, it's " + this.year;
},
set newYear(value){
this.year = value.y;
this.edition = value.e;
}
};
那么你可以说
book.newYear = { y: 2005, e: 2 };
(就我个人而言,我更倾向于使用解构赋值,但它会起作用。)当您赋值setter表示的值时,会调用setter函数:
var obj = {
set a(newVal) { console.log("hello"); }
}
obj.a = 1; // will console log "hello"
正如您所看到的,setter使用乘法参数没有意义,但它可以让您在设置值之前自由地操作该值:
var person = {
surname: "John",
lastname: "Doe",
get fullname() {
return this.surname + " " + this.lastname;
},
set fullname(fullname) {
fullname = fullname.split(' ');
this.surname = fullname[0];
this.lastname = fullname[1];
}
};
console.log(person.fullname); // "John Doe"
person.fullname = "Jane Roe";
console.log(person.surname); // "Jane"
console.log(person.lastname); // "Roe"
尝试设置newYear和不设置newYear,同样的设置getNewYear和not get newYear。实际上,也许解构赋值不能做到这一点,是吗?我感觉像是那种你记不起“节奏”这个词是不是真的时候。在这种情况下,我不使用属性,只使用一个名为
setNewYear(y,e)
的方法。我不太明白,但像那样的二传手似乎不是他们通常使用的方式。我也想到了一个解构任务,但不知道如何在这种情况下使用它。@JuanMendes是的,我同意,我不会这么做。我只是设计了一个例子。这是一个很好的例子,说明了如何使用setter/getter,但你需要通过提供一些解决方案将其与实际问题联系起来。你应该设置参数,而不是两个。