gpt4 book ai didi

Javascript从数组调用对象方法?

转载 作者:行者123 更新时间:2023-12-03 11:13:13 25 4
gpt4 key购买 nike

我正在尝试循环遍历游戏对象数组并调用它们的更新方法。游戏对象可以有不同的更新实现(例如:敌人的更新与 friend 的更新不同),所以我创建了一个原型(prototype)继承链。但我无法让它工作:在循环所有对象时,我似乎无法调用它们的更新方法:编译器说它们不存在。所以我的问题是:在 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.. 如此。 It is not recommended to use for..in to iterate an Array.

您可能想使用 Array.prototype.forEach ,像这样

gameobjects.forEach(function(gameObject) {
gameObject.update(1);
});

关于Javascript从数组调用对象方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27460182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com