我试图理解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;
}
};
Run Code Online (Sandbox Code Playgroud)
Uncaught SyntaxError:Setter必须只有一个形式参数
一个二传手的功能是,当你做的东西像是一个隐式调用功能:
someObject.property = 25;
Run Code Online (Sandbox Code Playgroud)
由于赋值操作涉及分配一个且只有一个值,因此setter函数必须具有单个参数.它只会被一个参数调用(通过隐式赋值机制),所以双参数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;
}
};
Run Code Online (Sandbox Code Playgroud)
然后你可以说
book.newYear = { y: 2005, e: 2 };
Run Code Online (Sandbox Code Playgroud)
(就我个人而言,我认为我更愿意通过解构分配来做到这一点,但它会起作用.)
分配setter表示的值时,将调用setter函数:
var obj = {
set a(newVal) { console.log("hello"); }
}
obj.a = 1; // will console log "hello"
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,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"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6814 次 |
最近记录: |