Объекты могут быть созданы с помощью функции конструктора, такой как ваша функция Character()
, однако вам необходимо убедиться, что методы объекта (такие как updateHealth()
и т. Д.) "Присоединены" к экземпляру объекта персонажа.
Одним из способов достижения этого является ключевое слово this
:
/* Attach the checkForDeath() function as a method of "this" Character instance */
this.checkForDeath = function() {
/* Accessing "this" corresponds to the instance of the character object */
if (this.health <= 0) return true;
else return false;
}
С этими изменениями checkForDeath()
теперь определяется как функция-член соответствующего экземпляра character
. Вам нужно убедиться, что вы получаете доступ к полям в экземпляре через this
, как показано в этой строке if(this.health <= 0) { ... }
Вам также необходимо убедиться, что вы создаете экземпляры Character
с помощью оператора new
, например:
const characterInstance = new Character( someElement );
Вот пересмотренная версия вашего кода, демонстрирующая этот подход:
function Character(display) {
this.health = 100;
this.display = display;
this.updateHealth = function() {
const health = this.health; /* Add this */
if (this.health == 100) {
this.display.innerText = 'HP: ' + health;
} else if (health > 10 && health < 100) {
this.display.innerText = 'HP: 0' + health;
} else if (health < 10 && health > 0) {
this.display.innerText = 'HP: 00' + health;
} else {
this.display.innerText = 'HP: 000';
}
}
this.checkForDeath = function() {
if (this.health <= 0) return true;
else return false;
}
this.takeDamange = function(damage) {
this.health -= damage;
}
this.makeMove = function(move, opponent = null) {
switch (move) {
case 'PUNCH':
opponent.takeDamage(parseInt(Math.random() * 100) % 10);
opponent.updateHealth();
break;
case 'HEAL':
this.health += 20;
break;
case 'KICK':
opponent.takeDamage(parseInt(Math.random() * 100) % 20);
opponent.updateHealth();
break;
case 'EXTERMINATE':
opponent.takeDamage(opponent.health);
opponent.updateHealth();
break;
}
return opponent.checkForDeath();
}
}
const player = new Character( document.querySelector('p') );
player.takeDamange();
player.updateHealth();
<p></p>