Javascript 从数组调用对象方法

Javascript call object methods from array?

本文关键字:对象 方法 调用 数组 Javascript      更新时间:2023-09-26

我正在尝试遍历游戏对象数组并调用它们的更新方法。游戏对象可以有不同的更新实现(例如:敌人的更新与朋友的更新不同),所以我创建了一个原型继承链。但是我无法让它工作:在循环遍历所有对象时,我似乎无法调用它们的更新方法:编译器说它们不存在。所以我的问题是:在 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会有01..就像这样,在每一次迭代中。不建议使用 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!!
    });