Javascript - 试图在动态属性中包含对象

标签 javascript loops object properties

我有一个创建对象并将其作为 ID 保存在另一个对象中的函数:

var enemyList = {}; //global var

Enemy = function () {
  var id = Math.random(); //random id
  var enemy = {
    some properties
  };
  enemyList.id = enemy;
}

现在,我在网上搜索时发现了“for loop”,我进行了编辑以更新包含敌人对象 ref 的每个 id:

setInterval(update, 40); //execute update all the time
var frameCount = 0; //global var

function update {
  if (frameCount % 100 === 0) //  spawns new enemy every 4 seconds
    Enemy();

  for (var key in enemyList) {
    enemyList.key.update(); //move them around...     
  }
}

每 4 秒创建一个新敌人,然后该循环应该根据某种逻辑移动每个敌人......事情是,一旦创建了一个新敌人,它就会取代旧敌人,四处移动然后是被下一个生成的敌人取代,尽管它不应该因为它们具有唯一的 ID。为什么会这样? 感谢您的宝贵时间。

最佳答案

当你说

enemyList.id = enemy;

您实际上是将 enemy 对象设置为 enemyList 对象的 id 属性,您没有创建值为编号。应该是

enemyList[id] = enemy;

这同样适用于 for 循环。

enemyList[key].update();

其他建议:

  1. for..in 将获得 enemyList 对象的所有可枚举的继承属性,而不仅仅是它的属性。所以,像这样的 if 条件是不太正常的

    for (var key in enemyList) {
      if (enemyList.hasOwnProperty(key)) // make sure it is the own property
        enemyList.key.update();          // move them around...
    }
    
  2. setInterval(update, 40); 表示 update 将每 40 毫秒执行一次,而不是 4 秒。所以,它应该是 setInterval(update, 4000);

关于Javascript - 试图在动态属性中包含对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33128517/

相关文章:

javascript - 为什么 Node 不将 Math.tan(Math.PI/2) 评估为 Infinity 而 Chrome V8 可以?

javascript - 使用 for 循环访问 Jquery 内的数组

loops - 在 Cypher/Neo4j 中使用 REDUCE 迭代 2 个列表

php - 在php循环中增加不存在的变量

javascript - 使用循环和条件语句比较数组中的元素

javascript - 我的 Excel 文件中没有显示日期,该文件是使用 Exceljs 在 Nodejs 上创建的

javascript - 更改虚拟列phpgrid的位置

javascript - 在 JavaScript 中返回一个带有一些额外属性的新对象

java - 如果我需要初始化子类,如何使用抽象类?

javascript - Angular JS : Pushing objects into an array. 它正在创建一个对象,然后是另一个数组。我需要它来创建单独的对象。这可能吗?