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

时间:2015-10-14 14:44:29

标签: javascript loops object properties

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

var enemyList = {}; //global var

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

现在,我找到了#循环'在线搜索和我编辑,以更新包含敌人对象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。为什么会这样? 谢谢你的时间。

1 个答案:

答案 0 :(得分:2)

当你说

<select class="browser-default">
  <option value="" disabled selected>Select a Manga</option>
  <option></option>
</select>
<select class="browser-default">
  <option value="" disabled selected>Chapter</option>
  <option></option>
</select>
<select class="browser-default">
  <option value="" disabled selected>Page</option>
  <option></option>
</select>

您实际上是将enemyList.id = enemy; 对象设置为enemy对象的id属性,而不是创建值为enemyList的新属性。应该是

id

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

for

其他建议:

  1. enemyList[key].update(); 将获取for..in对象的所有可枚举,继承属性,而不仅仅是其上的属性。因此,在其中包含enemyList条件并不常见,例如

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