2015-10-14 57 views
3

我有一个创建一个对象,并将其保存在另一个对象的ID的功能:在网上搜索使用Javascript - 试图遏制动态属性中的对象

var enemyList = {}; //global var 

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

现在,我发现“for循环”,我为了更新包含敌方目标参考每个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。为什么会发生? 谢谢你的时间。

+0

你能否包含enemyList var的实现?请修复您的缩进。 – Reinard

回答

2

当你说

enemyList.id = enemy; 

您在enemy对象实际上设置为enemyList对象的id财产,没有创建与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);

+0

你能解释一下关于使用enemyList [id] = enemy的更多信息;而不是enemyList.id = enemy; ?有什么不同?他们最终都被转换为随机数,他们不是? – RunningFromShia

+0

让我们说,'id'是0.5。现在,'enemyList.id'表示'enemyList'中的一个属性'id',而不是'enemyList [0.5]' – thefourtheye

+0

好吧首先谢谢你,你的代码工作,[]确实解决了问题。所以,你说在enemyList.id中的id不能被先前的变量替换(比如var id = random),那为什么它在使用enemyList [id]时是可替换的?我现在可能理解它的方式是使用[id] javascript实际上期望var。 – RunningFromShia