我在控制玩家重生的函数内部定义了一个 setTimeout (我正在创建一个游戏):
var player = {
...
death:(function() {
this.alive = false;
Console.log("death!");
var timer3 = setTimeout((function() {
this.alive = true;
Console.log("alive!");
}),3000);
}),
...
}
当它执行时,我在控制台中读到“死亡!” 3秒后“还活着!”。然而,alive
永远不会真正设置回 true,因为如果我写player.alive
在控制台中,它返回false
。我怎么能看到“活着!”但变量永远不会被设置回 true?
你必须小心this
。您需要分配您的this
在变量的外部范围内。这this
关键词always指的是this
当前作用域的范围,只要您将某些内容包装在其中,它就会发生变化function() { ... }
.
var thing = this;
thing.alive = false;
Console.log("death!");
var timer3 = setTimeout((function() {
thing.alive = true;
Console.log("alive!");
}),3000);
这应该会给你带来更好的成功。
2019-10-09 更新:最初的答案是正确的,但现在对于最新版本的 JavaScript 可以使用另一个选项。而不是使用function
,你可以使用箭头函数代替,它不会修改this
:
this.alive = false;
Console.log("death!");
var timer3 = setTimeout(() => {
this.alive = true;
Console.log("alive!");
}), 3000);
我认为,从 ES6 开始就支持这一点,除了 IE(当然)之外,ES6 是所有当前浏览器的一部分。如果您使用现代框架通过 Babel 或其他方式构建项目,该框架应该确保它在任何地方都能按预期工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)