繁体   English   中英

无法识别 ES6 setter 函数

[英]ES6 setter function isn't recognized

我正在研究 ES6 的新语法,现在我正在查看getset方法,但在尝试使用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);

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);

它不是全新的语法。 它是应用于 ES6 类的ES5 setter的变体。

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其定义为set setter 是没有意义的。 相反,它可以是

setFullName(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
}

您不能使用这样的设置器,请参阅下面的代码片段并查看此答案以获取解释

 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM