嗯,我正在制作一个函数来随着时间的推移更新玩家的生命值。
在我的 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
不会改变。为什么?我该如何使用它?
最佳答案
这不起作用,因为 hp
(可能是一个数值,根本不是一个对象)没有附加到任何外部对象。您的对象是players数组中的一个值(或players对象,并不重要),并且您需要改变那个。确实没有办法解决这个问题。
话虽如此,我会写得有点不同:
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);
}
关于javascript - 为什么对引用的引用不会更新原始对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33948052/