首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法识别ES6设置器函数

无法识别ES6设置器函数
EN

Stack Overflow用户
提问于 2017-01-02 12:57:35
回答 3查看 507关注 0票数 1

我正在研究ES6的新语法,现在我正在研究getset方法,在尝试使用set方法时出现了一个错误。

下面是一个示例:

代码语言:javascript
复制
  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);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-02 13:05:33

Getter和setter不用作标准函数。根据MDN:

当尝试设置对象属性时,set语法将对象属性绑定到要调用的函数。

您应该使用常规的=赋值来调用setter,而不是将其作为函数调用。

此外,setter只接受一个参数,而不能使用其余的参数(.)语法。您可以使用数组或对象,并使用析构分配来实现这一点。

代码语言:javascript
复制
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);

票数 3
EN

Stack Overflow用户

发布于 2017-01-02 13:07:58

这并不是全新的语法。它是ES5设定器应用于ES6类的一个变体。

get/set属性访问器的全部要点是,它们被定义为属性描述符,并用作普通属性:

代码语言:javascript
复制
console.log(person.fullName);
person.fullName = 'Foo Bar';

它应该是:

代码语言:javascript
复制
set fullName(value) {
    const [firstName, lastName] = value.split(' ');
    this.firstName = firstName;
    this.lastName = lastName;
}

如果您想将它作为普通方法使用,将其定义为set setter是没有意义的。相反,它可以是

代码语言:javascript
复制
setFullName(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
}
票数 2
EN

Stack Overflow用户

发布于 2017-01-02 13:16:22

你不能用这样的设置器,请看下面的片段和如需解释,请参阅这个答案。

代码语言:javascript
复制
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);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41427296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档