我的代码如下:
class Whateever {
constructor(ctx){
this.ctx
this.shotsFired = [];
}
onButtonPush(){
let shot = new Shot(this.position.x, this.position.y);
this.shotsFired.push(shot);
}
//called every frame
update(){
for (let shot in this.shotsFired) {
shot.update(); <-- I want to call this function
shot.draw(this.ctx); <-- and that function
}
}
-
class shoot{
constructor(x,y){
this.position = {
x : x,
y : y
};
}
update(){
// Do nothing
}
draw(ctx){
// do nothing
}
}
但是使用这种结构,我总是得到错误消息:
Whateever.js:40 Uncaught TypeError: shot.draw is not a function
at Whateever.update (ship.js:40)
at gameLoop (index.js:23)
shot.update()函数本身可以工作。
我只想知道如何通过数组中的循环调用对象函数?
这是大类的简单摘录。如果我要全班上课,那会很混乱。问题是绝对清楚的!
对象数组->迭代->在从对象进行函数的迭代调用期间。
如果您需要一个示例,我可以发布JAVA代码,弄清楚我的意思。
答案 0 :(得分:4)
要遍历数组,可以使用for...of:
let array = [{a:1}, {b:2}, {c:3}];
for (let item of array) {
console.log(item);
}
因此对于您的特定示例,它是:
update() {
for (let shot of this.shotsFired) {
shot.update();
shot.draw(this.ctx);
}
}
或更简单:
update() {
this.shotsFired.forEach(shot => {
shot.update();
shot.draw(this.ctx);
});
}
答案 1 :(得分:0)
使用时
for (let shot in this.shotsFired) {
shot.update(); <-- I want to call this function
shot.draw(this.ctx); <-- and that function
}
for循环实际上是在迭代键,因此您应该执行以下操作
for (let shot in this.shotsFired) {
this.shotsFired[shot].update(); <-- I want to call this function
this.shotsFired[shot].draw(this.ctx); <-- and that function
}
但是最终您不应该使用此技术遍历数组
或者,您可以使用许多其他可用的迭代选项,例如forEach或for