Задать вопрос
@DrunkDog

В чём я ошибаюсь по поводу сеттеров js?

Подскажите что я делаю не так, выдаёт ошибку "js2.js:8 Uncaught RangeError: Maximum call stack size exceeded
at set damage [as damage] (js2.js:8:34)"
class Marine {
	constructor(_damage, _armor) {
	  this.damage = _damage;
	  this.armor = _armor;
	}
	
	get damage() { return this.damage; }
	set damage(value) { this.damage = value; }
	
	get armor() { return this.armor; }
	set armor(value) { this.armor = value;  }
  }

  let marine = new Marine(10, 5);
  alert(marine.damage)
  marine.damage = 20;
  alert(marine.damage)
  • Вопрос задан
  • 93 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Присваивание this.damage вызывает сеттер, в котором находится присваивание и так до бесконечности.
Свойства класса должны отличаться по имени от сеттеров.
Ответ написан
Комментировать
HardBot
@HardBot
back-end, front-end developer
class Marine {
  constructor(_damage, _armor) {
    this.damage_g = _damage;
    this.armor_g = _armor;
  }
  
  get damage() { return this.damage_g; }
  set damage(value) { this.damage_g = value; }
  
  get armor() { return this.armor_g; }
  set armor(value) { this.armor_g = value;  }
  }

  let marine = new Marine(10, 5);
  alert(marine.damage_g)
  marine.damage_g = 20;
  alert(marine.damage_g)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы