好吧,我正在制作一项功能,可以随着时间的推移更新玩家的HP。
在我的NodeJS方面,我将球员阵列传递给require('./addHp')(players);
内部addHp.js
我有这个完全有效的功能:
module.exports = function (players) {
var addHp = setInterval ( function () {
for (var player in players) {
var thisPlayer = players[player];
(thisPlayer.hp < thisPlayer.maxHp) ? //Uggly
thisPlayer.hp += 10 : //Uggly
thisPlayer.hp = thisPlayer.maxHp; //Uggly
}
}, 2000);
}
但它真的不太容易阅读,所以我做了一些改变:
module.exports = function (players) {
var addHp = setInterval ( function () {
for (var player in players) {
var thisPlayer = players[player];
var hp = thisPlayer.hp;
var maxHp = thisPlayer.maxHp;
(hp < maxHp) ? hp += 10 : hp = maxHp; //Beautiful
}
}, 2000);
}
所有正确的值均达到hp
和maxHp
,但当我将hp
更改为5000时,players[player].hp
的值不会发生变化。为什么?我怎么用这种方式呢?
答案 0 :(得分:1)
这不起作用,因为hp
(可能是一个数值,而不是一个对象)没有附加到任何外部对象。你的对象是玩家阵列中的一个值(或玩家对象,并不重要),你需要改变那个。真的没办法解决这个问题。
话虽如此,我写的有点不同:
for (var player in players) {
var p = players[player];
p.hp = Math.max(p.maxHp, p.hp + 10);
}
如果players
是数组,您甚至可以执行以下操作:
for (var player of players) {
player .hp = Math.max(player .maxHp, player .hp + 10);
}