为什么对引用的引用不会更新原始对象?

时间:2015-11-26 22:48:55

标签: javascript node.js reference

好吧,我正在制作一项功能,可以随着时间的推移更新玩家的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);
}

所有正确的值均达到hpmaxHp,但当我将hp更改为5000时,players[player].hp的值不会发生变化。为什么?我怎么用这种方式呢?

1 个答案:

答案 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);
}