如何遍历类对象数组并在JavaScript中使用函数

时间:2019-07-03 21:42:27

标签: javascript arrays loops ecmascript-6 foreach

我想遍历对象数组并使用数组中对象的功能。我来自JAVA,这样做很正常。因此,我想它也可以在JS中使用,但是我不确定如何。

我的代码如下:

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代码,弄清楚我的意思。

2 个答案:

答案 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