requestAnimationFrame范围更改为窗口

时间:2013-10-31 13:10:40

标签: javascript requestanimationframe

我有一串看起来像这样的对象:

Game.world.update()

我想使用requestAnimationFrame来确定此函数的帧速率。

但是当我像这样实现它时:

World.prototype.update = function()
{
    requestAnimationFrame(this.update);
}

范围从世界对象更改为窗口对象。 如何在调用requestAnimationFrame()时保持我想要的范围?我知道它与匿名函数等有关,但我无法理解它。

3 个答案:

答案 0 :(得分:11)

通常的方法,无处不在:

World.prototype.update = function()
{
    var self = this;
    requestAnimationFrame(function(){self.update()});
}

或使用ES5 Function.prototype.bindcompatibility):

World.prototype.update = function()
{
    requestAnimationFrame(this.update.bind(this)});
}

答案 1 :(得分:1)

另一种方法是使用lambda表达式,如下所示:

requestAnimationFrame((timestamp) => { loop(timestamp) });

这也保持了范围,但它有点清洁。

答案 2 :(得分:0)

Game.world.update.call(scope);

范围是您想传入的任何范围。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call#Description