@umberford

Почему при установлении свойству объекта get и set возникает ошибка Maximum call stack size exceeded?

Код:
var person = {
name: 'Ivan'
}
Object.defineProperty(person, 'name' , {
	get: function(){
		console.log(this.name);
    return this.name
        //так же ставлю set
    }
})

Но при попытке обратится к свойству person.name появляется ошибка Maximum call stack size exceeded
Суть ошибки понимаю, не понимаю почему появляется
  • Вопрос задан
  • 68 просмотров
Решения вопроса 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Вы рекурсивно вызываете этот геттер. Не может быть геттера и поля с одним и тем же именем - когда вы геттер добавляете, ваше поле перестаёт существовать и this.name становится ссылкой на геттер. В итоге, когда вы обращаетесь к нему внутри геттера, возникает рекурсия.
Должно быть так:
var person = {
  _name: 'Ivan'
}
Object.defineProperty(person, 'name' , {
  get: function(){
    console.log(this._name);
    return this._name
  }
})
Ответ написан
Комментировать
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
Потому, что вы через геттер пытаетесь получить свойство name, которое уже есть геттер, и оно через свой геттер опять пытается его получить, и так бесконечно. Пишите приватное свойство
var person = {
_name: 'Ivan'
}
Object.defineProperty(person, 'name' , {
  get: function(){
    console.log(this._name);
    return this._name
        //так же ставлю set
    }
})
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы