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

标签 javascript node.js reference

嗯,我正在制作一个函数来随着时间的推移更新玩家的生命值。

在我的 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 不会改变。为什么?我该如何使用它?

最佳答案

这不起作用,因为 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/

相关文章:

javascript - 将数据传递给 Angular 4 中的自定义组件

javascript - ReactJS:从基础组件访问上下文

mysql - 在 Node.js 中解密 MySQL 的 AES_ENCRYPT

java - 检查泛型java中的引用类型

javascript - 返回插入的元素

javascript - d3 v5 中更新路径的平滑过渡

node.js - typescript 。不在特定机器上编译

node.js - 何时在 node.js 中创建 RabbitMQ channel

.net-3.5 - VS 2010 .NET Framework 问题(针对 3.5 的程序集)提示它需要更高版本的 .NET Framework

c - 如何使用引用运算符在 C 中获取指向字符串的指针?