Javascript 从数组调用对象方法
Javascript call object methods from array?
我正在尝试遍历游戏对象数组并调用它们的更新方法。游戏对象可以有不同的更新实现(例如:敌人的更新与朋友的更新不同),所以我创建了一个原型继承链。但是我无法让它工作:在循环遍历所有对象时,我似乎无法调用它们的更新方法:编译器说它们不存在。所以我的问题是:在 Javascript 中是否有可能通过共享相同基类的对象数组进行循环,并在它们上调用可以被不同子类覆盖的方法?
这就是我目前所拥有的,不知道我哪里出错了...:
//base gameobject class
function GameObject(name) {
this.name = name
};
GameObject.prototype.update = function(deltaTime) {
throw new Error("can't call abstract method!")
};
//enemy inherits from gameobject
function Enemy() {
GameObject.apply(this, arguments)
};
Enemy.prototype = new GameObject();
Enemy.prototype.constructor = Enemy;
Enemy.prototype.update = function(deltaTime) {
alert("In update of Enemy " + this.name);
};
var gameobjects = new Array();
// add enemy to array
gameobjects[gameobjects.length] = new Enemy("weirdenemy");
// this doesn't work: says 'gameobject doesn't have update method'
for (gameobject in gameobjects) {
gameobject.update(1); // doesn't work!!
}
这不是你的继承链的问题,而是这个结构的问题
for(gameobject in gameobjects){
gameobject.update(1); // doesn't work!!
}
当你使用 for..in
迭代Array
时,变量将只有索引值。所以,gameobject
会有0
,1
..就像这样,在每一次迭代中。不建议使用 for..in
来迭代数组。
你可能想使用,Array.prototype.forEach
,像这样
gameobjects.forEach(function(gameObject) {
gameObject.update(1);
});
当您使用 for ... in
遍历数组时,循环变量的值将是数组的键,而不是值。
无论如何,您真的不应该以这种方式遍历数组:
for (var i = 0; i < gameobjects.length; ++i)
gameobjects[i].update(1);
试试这个,它对我有用:=)
gameobjects.forEach(function(gameobject){
gameobject.update(1); // doesn't work!!
});
相关文章:
- 从 javascript 中的对象方法返回一个对象
- 在Javascript中调用对象方法时不是函数类型错误
- Java Script将对象方法映射到数组中的对象
- 将数据从promise then方法传递到对象方法
- 设置显示后Flash对象方法不可用:无
- 通过引用Javascript中的另一个函数来传递对象方法
- Javascript库对象方法声明
- JavaScript对象范围-在对象方法中使用对象变量
- jQuery:如何使用文字对象方法中的方法来获取全局变量
- Javascript 对象方法不更新变量
- setInterval 只在对象方法上运行一次
- 对象方法中函数中的上下文
- 用JavaScript编写对象方法的最佳方式是什么
- 使用回调处理程序调用函数内部的父对象方法
- 从Javascript中的对象方法中访问全局变量
- 将此(对象)传递到一个对象方法嵌套方法中
- 为什么我得到“;不是函数错误”;对于我的对象方法
- 带有回调的Javascript对象方法中的递归
- 更正Node.js异步管道中的对象方法调用
- 如何在对象方法上调用requestAnimFrame