let user = {
name: "John",
surname: "Smith",
get fullName() {
return `${this.name} ${this.surname}`;
},
set fullName(value) {
[this.name, this.surname] = value.split(" ");
}
};
user.fullName = "Alice Cooper";
for(let key in user) console.log(key);
/// Вывод 1: имя, фамилия, полное имя. ‹‹‹‹‹ Свойство fullName ЕСТЬ в списке
let user = {
name: "John",
surname: "Smith"
};
Object.defineProperty(user, 'fullName', {
get() {
return `${this.name} ${this.surname}`;
},
set(value) {
[this.name, this.surname] = value.split(" ");
}
});
user.fullName = "Alice Cooper";
for(let key in user) console.log(key);
/// Вывод :2 имя, фамилия. ‹‹‹‹‹ Свойство fullName НЕ указано
Мой вопрос: Почему свойство fullName не указано в качестве ключа пользовательского объекта, когда я определил свойство с помощью метода «defineProperty» (выход 2), но оно указано, когда оно определено непосредственно внутри объекта (выход 1 )?
Object.defineProperty
по умолчанию определяет неперечислимое свойство.for..in
перебирает только перечисляемые свойства. - person CertainPerformance   schedule 08.09.2020