max_shane
@max_shane
Javascript / Node.js dev

Почему данная конструкция не работает?

Сам конструктор у меня работал как надо.
Но не работает после того как я решил добавить метод getValues.
В нем он не определяет weapon.param; Скорее всего получает как undefined.
Потому что результаты сложения this._power = function(){return this.power + getValues(power)}; и тд и тп.
у меня получаются NaN.
Если вместо weapon.param поставить значение то все будет работать.
Чтобы не было вопросов что такое weapon - это свойство в которое передается объект со свойствами.
Сразу скажу оно точно впорядке и все передается, можно вместо weapon.param написать weapon.power (оно равно 0 предположим) все будет работать.
То-есть что то именно не так с записью самого метода и аргумента param.
Подскажите, что я делаю неправильно.

let Char = function (	lvl, name, 
						power, agil, inst, health, 
						crit, crit2, 
						dodge, dodge2, 
						def,  
						dmg1, dmg2,
						weapon ) {
						  
	Obj.apply(this, arguments);

	
	this.weapon = weapon;
	
	getValues = function(param) {
 		let sum = 0;
 		sum = sum + weapon.param;
 		return sum;

 	}

	this._lvl    = function(){return this.lvl};
 	this._hp	 = function(){return this.health*10};
	this._name   = function(){return this.name};
	this._power  = function(){return this.power + getValues(power)};
	this._agil   = function(){return this.agil + getValues(agil)};
	this._inst   = function(){return this.inst + getValues(inst)};
	this._health = function(){return this.health + getValues(health)};
	this._crit   = function(){return this.crit + getValues(crit)};
	this._crit2  = function(){return this.crit2 + getValues(crit2)};//anti-crit
	this._dodge  = function(){return this.dodge + getValues(dodge)};
	this._dodge2 = function(){return this.dodge2 + getValues(dodge2)};//anti-dodge
	this._def    = function(){return this.def + getValues(def)};
	this._dmg1   = function(){return this.dmg1 + Math.round(this._power()*0.2) + getValues(dmg1)};
	this._dmg2   = function(){return this.dmg2 + Math.round(this._power()*0.2) + getValues(dmg2)};

}
  • Вопрос задан
  • 148 просмотров
Решения вопроса 1
max_shane
@max_shane Автор вопроса
Javascript / Node.js dev
Я нашел ошибку. Всем спасибо.
Ошибка была в том, что power я пытаюсь передать просто как пустую переменную, без значения. Чтобы просто подставить само слово (hp, power и тд) и вызывать это свойство у объекта weapon.
Но ведь я уже ранее создал переменные в конструкторе power, agile, inst и тд, и им уже присвоены числовые значения. Получается я передаю число в аргументе функции. Потому и не работает.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@dimoff66
Кратко о себе: Я есть
Потому что
weapon[param] вместо weapon.param
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
01 мая 2024, в 02:11
5000 руб./за проект
01 мая 2024, в 00:29
2000 руб./за проект
01 мая 2024, в 00:20
15000 руб./за проект