Применение оператора распространения к объекту с помощью геттера

Если вы объявите класс с геттером

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

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

вы можете получить доступ к получателю после создания нового объекта

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

но это не будет работать после копирования объекта с использованием оператора распространения

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

Я думаю, что это несколько запутанный синтаксис.

2 ответа

Только оператор спреда

копирует собственные перечисляемые свойства из предоставленного объекта в новый объект.

В то время как свойство определено с использованием синтаксиса get

будет определяться по прототипу объекта.

Оператор распространения создает новый объект, используя Object как конструктор. Итак, в вашем случае, personCopy это не экземпляр класса Person и в результате этого его __proto__ не является Person.prototype и, следовательно, геттер не будет работать.

Другие вопросы по тегам