更新方法中的rightDown范围问题

时间:2013-02-25 16:57:24

标签: typescript

我在这里有一些奇怪的行为,在渲染的JS中,update方法中的这个值是window,但它应该是Game(就像onKeyDown方法一样)。你怎么纠正这个?

class Game {

    //for the key events
    rightDown: bool = false;

    constructor() {

    }


    onKeyDown(evt) {
        if (evt.keyCode == 39) this.rightDown = true;
        else if (evt.keyCode == 37) this.leftDown = true;
        if (evt.keyCode == 32) {
            this.space = true;
            var bullet = new GameObjects.GameObjects.Bullet(10);
            this.addProjectile(bullet);
        };
    }



    update(elapsed: number) {

   if (this.rightDown) {
            console.log(this.rightDown);
        }
}

1 个答案:

答案 0 :(得分:3)

你在其他地方写过这样的东西:

setupAnimationTimer(myGame.update); // Maybe window.requestAnimationFrame ?

请注意,您只是从update的原型传递Game - 没有指针返回实际的myGame实例,因此无论谁做任何事情都无法做到使用正确的update指针正确调用this方法的回调。

如果您搜索周围有很多关于this绑定如何丢失或保留的博客文章;这里有两种可能的解决方案:

// Create a new closure
setupAnimationTimer(() => myGame.update());

// Create a new function object that always invokes with the given 'this' value
setupAnimationTimer(myGame.update.bind(myGame));