Javascript-尝试在动态属性中包含对象
我有一个函数,可以创建一个对象并将其保存为另一个对象中的ID: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
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。