Почему при работе сеттера не происходит создание нового св-ва?

В первом случае создается объект, затем создается его внутреннее св-во.

obj = {};
obj.sister = 'Fiona';

console.log(obj.sister); //Fiona

Второй пример практически такой же самый. Единственное отличие - использование сеттера для создаваемого св-ва.

let obj = {
    surname: 'Li',
    set name(val) {
        this.fullName = val + ' ' + this.surname;
    }
};
obj.name = 'Eva'; //срабатывает метод set

console.log(obj.name); //undefined

Почему так? Почему не происходит создание св-ва?


Ответы (1 шт):

Автор решения: Alexander Lonberg

let obj = {
  surname: 'Li',
  set name(val) {
    this.fullName = val + ' ' + this.surname;
  },
  get name() {
    return 'Потому что надо добавить getter'
  }
};
obj.name = 'Eva'; //срабатывает метод set

console.log(obj.name)

На этой странице можно найти, что совместное использование value и setter/getter является ошибкой. Поэтому либо используем как в первом случае(примера), либо setter/getter.

Часто используется один getter, когда значение может быть вычисляемым и/или оно не может(не должно) быть "записываемым".

→ Ссылка