使用 getter 对对象应用展开运算符

Bas*_*ssT 10 javascript ecmascript-2018

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

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

  get fullName() {
    return [this.firstName, this.lastName].join(" ");
  }
}
Run Code Online (Sandbox Code Playgroud)

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

const person = new Person("Jane", "Doe");
console.log(person.fullName); // "Jane Doe"
Run Code Online (Sandbox Code Playgroud)

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

const personCopy = { ...person };
console.log(personCopy.fullName); // undefined
Run Code Online (Sandbox Code Playgroud)

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

Bas*_*ssT 5

仅扩展运算符

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

而使用get 语法定义的属性

将在对象的原型上定义。