为什么此对象在es6语法的递归调用中变为null。如何在ES6程序员中进行递归调用?

时间:2018-08-12 04:09:28

标签: javascript ecmascript-6

一个类定义如下:

export default class FishGame {
  constructor(window) {
    .......
    this.window = window
    ......
  }

  gameloop() {
    this.window.requestAnimationFrame(this.gameloop);
    var now = Date.now();
    this.deltaTime = now - this.lastTime;
    this.lastTime = now;
    ....
  }
}

您可以看到gameloop函数是一个递归调用。 我以这种方式调用此函数:

 function game() {
    let fishGame = new FishGame(this);
    fishGame.gameloop();
 }

当引发异常时,有人可以告诉我为什么该对象为null吗?: reset_index

2 个答案:

答案 0 :(得分:0)

class FishGame {
  static loop(game) {
    function doloop() {
      requestAnimationFrame(doloop)
      game.gameloop()
    }
    
    doloop()
  }
  
  constructor() {
    self = this;
    this.name = "Lamax"
  }

  gameloop() {
    console.log(Date.now()+": "+this.name);
  }
}

FishGame.loop(new FishGame());

问题是您正在调用此方法,在requestAnimationFrame中作为参数传递的函数中,尝试上述代码段

答案 1 :(得分:0)

问题是this在回调中丢失。 this post中描述了几种清洁的方法。一种方法是将this绑定到回调,或使用自动绑定了this的箭头函数:

class FishGame {
  constructor() {}

  gameloop() {
    requestAnimationFrame(() => this.gameloop());
    console.log(Date.now());
  }
}

new FishGame().gameloop();