修改匿名函数内的对象属性

时间:2016-10-21 14:43:09

标签: javascript properties anonymous-function

我有以下代码段:

if (this.y <= 0 || this.y >= screenHeight - this.h) {
    if (!this.verticalHit) {
        this.dy = -this.dy;
        this.verticalHit = true;
        setTimeout(function() {this.verticalHit = false;}, 500);
    }
}

每个帧执行此代码段,verticalHit是代码所属对象的属性。

我想修改verticalHit,如上面的代码所示。但是,似乎this在匿名函数中被覆盖,verticalHit永远不会被分配false

我怎么能解决这个问题?我有什么方法可以从setTimeout返回吗?

1 个答案:

答案 0 :(得分:0)

您可以在匿名函数上使用箭头函数或.bind(this)。目前,超时中的this绑定到全局对象。

if (this.y <= 0 || this.y >= screenHeight - this.h) {
    if (!this.verticalHit) {
        this.dy = -this.dy;
        this.verticalHit = true;
        setTimeout(() => {this.verticalHit = false;}, 500);
    }
}

这是另一个解答this的答案。