Дескриптор свойства аксессора в объекте Javascript

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 )?


person Nainshi Nayan    schedule 08.09.2020    source источник
comment
Object.defineProperty по умолчанию определяет неперечислимое свойство. for..in перебирает только перечисляемые свойства.   -  person CertainPerformance    schedule 08.09.2020