4

如果你声明一个带有 getter 的类

class Person {
  constructor(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
  }

  get fullName() {
    return [this.firstName, this.lastName].join(" ");
  }
}

您可以在实例化新对象后访问 getter

const person = new Person("Jane", "Doe");
console.log(person.fullName); // "Jane Doe"

但这在使用扩展运算符复制对象后不起作用

const personCopy = { ...person };
console.log(personCopy.fullName); // undefined

我认为这有点令人困惑的语法。

4

2 回答 2

3

扩展运算符使用Object构造函数创建一个新对象。因此,在您的情况下,personCopy它不是类的实例,Person因此,它__proto__不是Person.prototype,因此 getter 将不起作用。

于 2019-05-12T11:10:34.887 回答
3

扩展运算

将自己的可枚举属性从提供的对象复制到新对象。

而使用get 语法定义的属性

将在对象的原型上定义。

于 2019-05-12T09:45:08.873 回答