为什么会抛出“未捕获的TypeError:非法调用”?
function Game () {
this.reqAnimFrame = window.requestAnimationFrame;
this.gameLoop = function () {
this.reqAnimFrame(this.gameLoop); // It's thrown on this line
};
}
var game = new Game();
game.gameLoop();
答案 0 :(得分:5)
当您致电this.reqAnimFrame
时,window.requestAnimationFrame
的上下文不再是window
,而是成为this
的任何内容(在这种情况下,Game
的实例})。除非使用正确的上下文调用它们,否则大多数内置函数都不起作用。 (例如,像
var func = console.log;
func("blah");
也不起作用,出于同样的原因)。
要解决此问题,您应该只使用原始格式:window.requestAnimationFrame
,或者可以在存储时将其绑定到正确的上下文:
this.reqAnimFrame = window.requestAnimationFrame.bind(window);