我只是为了练习而制作简单的JS游戏。我遇到了一个我不知道如何命名的问题。标题可能完全不正确。但无论如何,这是我的代码。
function Battle () {
this.name;
this.pointsAmount = 100;
this.attack = function attack (opponent) {
opponent.pointsAmount -= 30;
alert(this.name + " hit " + opponent.name);
};
};
var player1 = new Battle ();
var player2 = new Battle ();
// players
player1.name = "Lorem";
player2.name = "Ipsum";
player1.attack(player2);
alert(player2.name+ ' has lost ' + opponent.pointsAmount + ' points.');
因此,我想访问attack
函数中具有值30
的属性。 Chrome开发者工具会返回opponent is not defined
。关于这个问题的任何建议?感谢。
答案 0 :(得分:2)
opponent
仅在攻击方法内定义;它不能在该方法之外引用。这就是为什么这一行
alert(player2.name+ ' has lost ' + opponent.pointsAmount + ' points.');
失败了。将opponent
替换为player2
(只有)。
另一方面,对于每个玩家来说,没有理由一遍又一遍地重新定义攻击方法。你可以考虑像这样定义它
Battle.prototype.attack = function(opponent) {
opponent.pointsAmount -= 30;
alert(this.name + " hit " + opponent.name);
};
答案 1 :(得分:1)
JavaScript中的变量只是指向对象的指针。在你的例子中,对手只是对player2对象的引用,因为那是你传递给函数的参数。从攻击之外,您可以简单地将对象引用为player2。
alert(player2.name+ ' has lost ' + player2.pointsAmount + ' points.');
答案 2 :(得分:1)
如果你想得到丢失了多少分,你必须要像......
var preAmount = player2.pointsAmount;
player1.attack(player2);
alert(player2.name+ ' has lost ' + (preAmount - player2.pointsAmount) + ' points.');
答案 3 :(得分:0)
您应该执行以下操作:
alert(player2.name+ ' has lost 30 points.');
只要每次攻击花费30分,这都很好:)。否则,如果你想说玩家2剩下多少分数:
alert(player2.name+ ' has ' + player2.pointsAmount + ' points left.');
答案 4 :(得分:0)
这是我的变体:-)我为Battle类添加了一个新变量pointsLostOnPrevAttack
function Battle () {
this.name;
this.pointsAmount = 100;
this.pointsLostOnPrevAttack;
this.attack = function attack (opponent) {
opponent.pointsAmount -= 30;
opponent.pointsLostOnPrevAttack = 30;
alert(this.name + " hit " + opponent.name);
};
};
player1.attack(player2);
alert(player2.name+ ' has lost ' + player2.pointsLostOnPrevAttack + ' points and has now '+ player2.pointsAmount + " points left");
现在它发出警报" Ipsum已经失去了30分并且还剩下70分"