Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript requestAnimationFrame范围更改为窗口_Javascript_Requestanimationframe - Fatal编程技术网

Javascript requestAnimationFrame范围更改为窗口

Javascript requestAnimationFrame范围更改为窗口,javascript,requestanimationframe,Javascript,Requestanimationframe,我有一个如下所示的对象链: Game.world.update() 我想使用requestAnimationFrame来确定此函数的帧速率 但是,当我这样实现它时: World.prototype.update = function() { requestAnimationFrame(this.update); } 范围从世界对象更改为窗口对象调用requestAnimationFrame()时如何维护所需的作用域?我知道这与匿名函数等有关,但我无法理解 Game.world.upd

我有一个如下所示的对象链:

Game.world.update()
我想使用requestAnimationFrame来确定此函数的帧速率

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

World.prototype.update = function()
{
    requestAnimationFrame(this.update);
}
范围从世界对象更改为窗口对象调用requestAnimationFrame()时如何维护所需的作用域?我知道这与匿名函数等有关,但我无法理解

Game.world.update.call(scope);
其中scope是要传入的任何范围


通常的方法,适用于任何地方:

World.prototype.update = function()
{
    var self = this;
    requestAnimationFrame(function(){self.update()});
}
或者使用ES5():


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

requestAnimationFrame((时间戳)=>{loop(时间戳)})

这也保持了作用域,但更简洁。

requestAnimationFrame(This.update.call(This));我试过了,但是我发现堆栈有问题。。。
World.prototype.update = function()
{
    requestAnimationFrame(this.update.bind(this)});
}