Посмотрите на сообщение об ошибке:
Нельзя указывать аксессоры и атрибут value или writeable.
Не имеет смысла говорить, если свойство доступно для записи, когда вы явно указываете, что происходит, когда вы пытаетесь его написать.
Поэтому удалите:
value: 1997,
И вы не можете дать ему значение, когда значение вычисляется динамически, когда вы его читаете, поэтому удалите:
person.birthYear
Затем вы получите сообщение об ошибке рекурсии, потому что каждый раз, когда вы пытаетесь читать person.birthYear
, ваша функция getter пытается прочитать person.birthYear
.
Поэтому сохраните значение где-то еще.
var person = { _birthYear: 1997 };
Object.defineProperty(person, 'birthYear', {
enumerable: true,
configurable: false,
set: function (value) {
this._birthYear = value;
},
get: function() {
return 'Birth year - ' + this._birthYear;
}
});
console.log(person.birthYear);