首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么这个对象在es6语法的递归调用中变成null。如何在es6程序员中进行递归调用?

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

Stack Overflow用户
提问于 2018-08-12 12:09:28
回答 2查看 86关注 0票数 0

类的定义如下:

代码语言:javascript
运行
复制
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函数是一个递归调用。我以这种方式调用此函数:

代码语言:javascript
运行
复制
 function game() {
    let fishGame = new FishGame(this);
    fishGame.gameloop();
 }

当抛出异常时,谁能告诉我为什么这个对象是空的?:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-12 12:27:55

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

代码语言:javascript
运行
复制
class FishGame {
  constructor() {}

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

new FishGame().gameloop();

票数 0
EN

Stack Overflow用户

发布于 2018-08-12 12:24:19

代码语言:javascript
运行
复制
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中作为参数传递的函数中,尝试上面的代码片段

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51805603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档