Мой вызов метода изменяет значение универсальной переменной только один раз, а затем это значение остается прежним, но оно не должно (JavaScript)

#javascript #class #methods

Вопрос:

 class Human {
  constructor(
    kind, name, agility, mana, weapon, health) {
      this.kind = kind;
      this.name = name;
      this.agility = agility;
      this.mana = mana;
      this.weapon = weapon;
      this.health = health;
  }
  attack(enemyHealth) {
    var neprijateljhp = document.querySelector(".enemyhealth");
    if (this.kind === "archer") {
      damageh = 30;
      numberofattacksh = 2;
    } else if (this.kind === "witch") {
      damageh = 30;
      numberofattacksh = 0.5;
    } else if (this.kind === "swordswomen") {
      damageh = 80;
      numberofattacksh = 1.2;
    }
    enemyHealth = enemyHealth - damageh * numberofattacksh;
    neprijateljhp.innerHTML = "Health:"   enemyHealth;
  }
}

var enemyHealth = 200;
let archer = new Human(
    "archer", 
    "Anabelle", 
    "60", 
    "20", 
    "bow and arrow", 
    "200"
);
archer.attack(enemyHealth); 

Комментарии:

1. Пожалуйста, предоставьте более подробную информацию: 1. HTML, 2. Что вы ожидаете, что произойдет, когда вы вызовете этот JS? 3. Что происходит вместо этого?

2.Кроме enemyHealth = того, назначение изменяет только локальную enemyHealth переменную (определяемую параметром) в методе, а не глобальную. Обратите внимание, что переменные не передаются по ссылке в JS.

Ответ №1:

привет, у вас несколько ошибок. вы не определили урон и количество атак в конструкторе. тогда ваш класс не сможет их найти и выдаст вам ошибку. Я определил это и дал им 0 по умолчанию. конечно, вы можете изменить это.

это ваш код:

 class Human {
  constructor(
    kind, name, agility, mana, weapon, health) {
      this.kind = kind;
      this.name = name;
      this.agility = agility;
      this.mana = mana;
      this.weapon = weapon;
      this.health = health;
      this.damageh = 0;
      this.numberofattacksh=0
  }
  attack(enemyHealth) {
    var neprijateljhp = document.querySelector(".enemyhealth");
    if (this.kind === "archer") {
      this.damageh = 30;
      this.numberofattacksh = 2;
    } else if (this.kind === "witch") {
      this.damageh = 30;
      this.numberofattacksh = 0.5;
    } else if (this.kind === "swordswomen") {
      this.damageh = 80;
      this.numberofattacksh = 1.2;
    }
    enemyHealth = enemyHealth - this.damageh * this.numberofattacksh;
    neprijateljhp.innerHTML = "Health:"   enemyHealth;
  }
}
 

Комментарии:

1. спасибо вам за ваш вклад. я исправил это, а также понял, что проблема может заключаться в том, что имя параметра совпадает с именем переменной, которое я использую в качестве аргумента (enemyHealth). Еще раз спасибо вам, аган, и удачи вам в вашей работе!

2. Я рад, что вы смогли решить эту проблему. спасибо, мой друг. ты тоже. <3