我有以下代码段:
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
返回吗?
答案 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
的答案。