我正在研究ES6的新语法,现在我正在研究get和set方法,在尝试使用set方法时出现了一个错误。
下面是一个示例:
class Person {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
get fullName() {
return `${this.firstName} ${this.lastName}`;
}
set fullName(...value) {
this.firstName = firstName;
this.lastName = lastName;
}
}
let a = new Person('Person','A');
a.fullName('Person','B')
console.log(a);发布于 2017-01-02 13:05:33
Getter和setter不用作标准函数。根据MDN:
当尝试设置对象属性时,set语法将对象属性绑定到要调用的函数。
您应该使用常规的=赋值来调用setter,而不是将其作为函数调用。
此外,setter只接受一个参数,而不能使用其余的参数(.)语法。您可以使用数组或对象,并使用析构分配来实现这一点。
class Person {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
get fullName() {
return `${this.firstName} ${this.lastName}`;
}
set fullName([firstName, lastName]) {
this.firstName = firstName;
this.lastName = lastName;
}
}
let a = new Person('Person','A');
a.fullName = ['Person', 'B'];
console.dir(a);
发布于 2017-01-02 13:07:58
这并不是全新的语法。它是ES5设定器应用于ES6类的一个变体。
get/set属性访问器的全部要点是,它们被定义为属性描述符,并用作普通属性:
console.log(person.fullName);
person.fullName = 'Foo Bar';它应该是:
set fullName(value) {
const [firstName, lastName] = value.split(' ');
this.firstName = firstName;
this.lastName = lastName;
}如果您想将它作为普通方法使用,将其定义为set setter是没有意义的。相反,它可以是
setFullName(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}发布于 2017-01-02 13:16:22
你不能用这样的设置器,请看下面的片段和如需解释,请参阅这个答案。
class Person {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
get fullName() {
return `${this.firstName} ${this.lastName}`;
}
set fullName(fname) {
let fn = fname.split(' ');
this.firstName = fn[0];
this.lastName = fn[1];
}
}
let a = new Person('Person','A');
a.fullName = 'Person B';
console.dir(a);
https://stackoverflow.com/questions/41427296
复制相似问题