0

我在 JavaScript 中的对象存在一些问题。请注意以下代码:

function Bullet(x, y) {
    this.x = x;
    this.y = y;
    console.log(this.x);

    this.fire = function() {
        this.x++;
        console.log(this.x);
    };

    this.draw = function(ctx, bulletImage) {
        ctx.drawImage(bulletImage, this.x, this.y);
    };
};

问题在于 this.fire(); 我想要做的是从我的主脚本运行它:

bullet = new Bullet(20, 80);
bullet_loop = setInterval(bullet.fire, 11);

然后它应该执行该this.fire();功能,直到我取消间隔。然而,这按计划进行。

创建对象时,它具有console.log(this.x); this 应返回的行"20",但是当this.fire();调用该函数时,它的总和应该1this.x您在发出时所期望的一样this.x++;。但是,当它到达函数console.log(this.x);中的行时,this.fire();它会返回NaN.

有谁知道我在这里做错了什么?

4

1 回答 1

4

回调未正确绑定。最简单的方法是将命令包装在一个函数中:

bullet_loop = setInterval(function() { bullet.fire(); }, 11);

您还可以使用以下Function.prototype.bind功能:

bullet_loop = setInterval(bullet.fire.bind(bullet), 11);
于 2013-06-23T12:10:34.517 回答