什么是ECMAScript 6类中的getter和setter?

我很困惑,在ECMAScript 6类中,getter和setter是什么意思。 什么目的? 下面是我所指的一个例子:

class Employee { constructor(name) { this._name = name; } doWork() { return `${this._name} is working`; } get name() { return this._name.toUpperCase(); } set name(newName){ if(newName){ this._name = newName; } } } 

这些setter和getter允许您直接使用属性(不使用括号)

 var emp = new Employee("TruMan1"); if (emp.name) { // uses the get method in the background } emp.name = "New name"; // uses the setter in the background 

这只是设置和获得财产的价值。

ES6中的获取者和设置者与其他语言(包括ES5)具有相同的用途。 ES5已经允许getter和setter通过Object.defineProperty ,尽pipe它们不那么干净,使用起来也比较麻烦。

有效的是,getter和setter允许你使用标准的属性访问符号进行读写操作,同时还能够自定义属性如何检索和变异,而不需要显式的getter和setter方法。

在上面的Employee类中,这意味着你可以像这样访问name属性:

 console.log(someEmployee.name); 

看起来像一个普通的属性访问,但它实际上会在返回之前在名称上调用toUpperCase 。 同样,这样做:

 someEmployee.name = null; 

会访问setter,并且不会修改内部_name属性,因为name的setter中引入了guard子句。

另请参见一般问题为什么使用getter和setter? 有关为什么能够修改成员访问function的更多信息是有用的。