You have to be careful with this
. You need to assign your this
in the outer scope to a variable. The this
keyword always refers to the this
of the current scope, which changes any time you wrap something in function() { ... }
.
var thing = this;
thing.alive = false;
Console.log("death!");
var timer3 = setTimeout((function() {
thing.alive = true;
Console.log("alive!");
}),3000);
This should give you better success.
Update 2019-10-09: The original answer is true, but another option is now available for recent versions of JavaScript. Instead of using function
, you can use an arrow function instead, which does not modify this
:
this.alive = false;
Console.log("death!");
var timer3 = setTimeout(() => {
this.alive = true;
Console.log("alive!");
}), 3000);
This is supported from ES6 forward, which is part of all current browsers but IE (of course), I think. If you are using a modern framework to build your project via Babel or whatever, the framework should make sure this works as expected everywhere.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…