max_shane
@max_shane
Javascript / Node.js dev

Почему не получаю ожидаемый результат в данном примере?

Привет!
Изучаю js, делаю консольную рпг в качестве обучения.
Прошу посмотреть данный код:
// Create global object class
let Obj = function (	name, 
						power,)  {   	      
	this.name = name;
	this.power = power;

};

// Create character class
let Char = function (	name, 
						power, weapon ) {  
	Obj.apply(this, arguments);

	this.weapon = weapon;

	this.x_power  = power + weapon.power;
}

// Create weapon
									
let Club = new Obj("Дубина",  2 ); // 

// Create character 
// 
let Player = new Char("Char", 1,  Club);

console.log(Player.power); // Ожидаю получить 1 - Получаю!
console.log(Player.x_power); // Ожидаю получить 3 - Получаю!
Player.power = 5; // Изменяю power 
console.log(Player.power); // Ожидаю получить 5 - Получаю!
console.log(Player.x_power); // Ожидаю получить 7 (как power + weapon.power), но мои ожидания не оправдываются: Получаю 3.


Почему x_power больше не пересчитывается?
Изначально ведь все работает и x_power получает значение как сумма power и weapon.power.
Power пересчитывается ведь.
  • Вопрос задан
  • 106 просмотров
Решения вопроса 1
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
для таких задач принято использовать getter-ы и setter-ы

https://learn.javascript.ru/getters-setters
https://learn.javascript.ru/descriptors-getters-setters

вот немного кривоватый но рабочий вариант:
// Create global object class
let Obj = function (	name,  power )  {   	      
  this.name = name;
  this.power = this._power = power;
};



// Create character class
let Char = function (	name, power, weapon ) {  
  Obj.apply(this, arguments);

  this.weapon = weapon;

  this.x_power  = power + weapon._power;
  
  Object.defineProperty(this, "power", {
    set: function(value) {
    /* console.log("!!!!!") */
        this._power = value;
        this.x_power  = this._power + this.weapon._power;
    },
    get: function(){
    	  return this._power;
    }

  });  
}



// Create weapon
                  
let Club = new Obj("Дубина",  2 ); // 

// Create character 
// 
let Player = new Char("Char", 1,  Club);

console.log(Player.power); // Ожидаю получить 1 - Получаю!

console.log(Player.x_power); // Ожидаю получить 3 - Получаю!

Player.power = 5; // Изменяю power 
console.log(Player.power); // Ожидаю получить 5 - Получаю!
console.log(Player.x_power); // Ожидаю получить 7 (как power + weapon.power), но мои ожидания не оправдываются: Получаю 3.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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