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

Javascript-尝试在动态属性中包含对象,javascript,loops,object,properties,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”,并进行了编辑,以更新包含敌方对象参考的每个id: setInte

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

var enemyList = {}; //global var

Enemy = function () {
  var id = Math.random(); //random id
  var enemy = {
    some properties
  };
  enemyList.id = enemy;
}
现在,我在网上搜索时找到了“for loop”,并进行了编辑,以更新包含敌方对象参考的每个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;
实际上,您正在将
敌方
对象设置为
enemyList
对象的
id
属性,而不是创建值为
id
的新属性。应该是的

enemyList[id] = enemy;
这同样适用于
for
循环

enemyList[key].update();

其他建议:

  • 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...
    }
    
  • setInterval(更新,40)表示更新将每40毫秒执行一次,而不是每4秒执行一次。因此,它应该是
    setInterval(更新,4000)


  • 您是否可以包括enemyList变量的实现?请同时修正你的缩进。你能解释更多关于使用enemyList[id]=敌军;而不是enemyList.id=敌人?有什么区别?它们最终都被转换成一个随机数,不是吗?让我们说,
    id
    是0.5。现在,
    enemyList.id
    表示
    enemyList
    中的一个属性
    id
    ,而不是
    enemyList[0.5]
    好的,首先谢谢你,你的代码有效,[]确实解决了问题。那么,您是说enemyList.id中的id不能被先前的vars替换(比如varid=random),那么为什么在使用enemyList[id]时它是可替换的呢?我现在的理解是,虽然使用[id]javascript实际上需要一个变量。好吧,让我们用另一种方式来解决这个问题。如何在
    enemyList
    上创建名为
    name
    的属性?我想是enemyList.name。