难以引用函数,使用原型

时间:2012-07-31 17:08:40

标签: javascript

我正在开发HTML 5 Canvas游戏,带有游戏循环。

到目前为止,这是我的代码。它没有做任何事情,这很好,但我收到了一个错误

TypeError:Object [object DOMWindow]没有方法'Update'[http:// localhost:2516 / scripts / lib / Game.js:47]

编辑:此代码有效,它不再反映问题,它反映了解决方案

  var game;
    var Game = function () {
    }


   Game.prototype.Update = function () {

}

Game.prototype.Draw = function () {

}

function GameLoop () {


    game.Update(); //this is line 47
    //context.save();
    game.Draw();
   // context.restore();
    setTimeout(GameLoop, 10);
}
function Start() {
    game = new Game();
   GameLoop();
}

编辑:我认为“this”正在查看文档而不是Game对象,我不明白为什么或如何修复它

1 个答案:

答案 0 :(得分:1)

GameLoop

中的这一行很可能出现此问题
setTimeout(this.GameLoop, 10);

您无法传递“方法”参考;只有功能参考。因此,当setTimeout调用它时,将在没有设置上下文的情况下调用它,就像你将其称为:

GameLoop();

您必须bind

setTimeout(this.GameLoop.bind(this), 10);

或者将其包装在与bind将要执行的操作类似的另一个函数中(将this保存为self,因为该函数将具有this的自己的值:)

var self = this;
// ...
setTimeout(function () {
    self.GameLoop();
}, 10);