我正在制作一个带有 canvas 标签的 Javascript 游戏,我正在使用增强的 for 循环来更新玩家位置。
简而言之:
var actors = new Array();
var player = new Actor(0, 0, img);
actors[0] = player;
function update_positions() {
//position 1
for(var a in actors) {
//position2
a.xpos += a.xvel;
a.ypos += a.yvel;
}
}
就在位置 1 的 for 循环之外,我可以访问 actors[0].xvel 的正确值。在位置 2 的 for 循环内,a.xvel 未定义。有人可以向我解释发生了什么吗?
最佳答案
for...in
语句旨在用于遍历对象属性,通过查看您的代码似乎actors
是一个数组(您正在设置索引为0< 的初始元素
)。
这个声明也将crawl up原型(prototype)链,如果你扩展了 Array.prototype
那些属性将被迭代,并且迭代的顺序也是不保证的。
我建议您避免使用 problems并使用普通的 for 循环进行迭代:
for (var i = 0; i < actors.length; i++) {
actors[i].xpos += actor.xvel;
actors[i].ypos += actor.yvel;
}
如果我错了,actors
不是数组,我建议您使用 hasOwnProperty
方法,以确保该属性存在于对象本身,不在原型(prototype)链的某个地方:
for (var name in object) {
if (object.hasOwnProperty(name)) {
//
}
}
关于javascript - Javascript 增强 for...in 循环中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1885317/