Применение оператора распространения к объекту с помощью геттера
Если вы объявите класс с геттером
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
и, следовательно, геттер не будет работать.