如何使setTimeout引用对象的上下文


var myObj = {
    name:"mike",
    go:function(){
        console.log(this.name);
    }
}
myObj.go()   //logs out mike
setTimeout(this.myObj.go,200)  //logs out (emptyString)

定义一个变量引用前面的对象:

var _this = this;
setTimeout(function() {_this.myObj.go();}, 200);
var myObj = {
    name:"mike",
    go:function(){
        console.log(this.name);
    }
}
setTimeout(function(){myObj.go()},200)

试试这个:

setTimeout(function(){
  myObj.go();
},200);

试试这个

var myObj = {
    name:"mike",
    go:function(){
        console.log(this.name);
    }
}
myObj.go();   //logs out mike
setTimeout(function(){
    myObj.go(); //logs out mike too
},200);

几种方法:

setTimeout(this.myObj.go.bind(this.myObj), 200);

var that = this;
setTimeout(function () {
    that.myObj.go();
}, 200);

注意.bind在旧的浏览器中不被支持,所以可能需要一个polyfill来支持它。以下是关于该方法的一些信息:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind

你的代码是正确的,除了一些东西。

setTimeout(this.myObj.go,200)
应该

setTimeout(function() {myObj.go()},200)

未定义,因为this.myObj不在setTimeout的作用域中,也没有被封装在匿名函数或变量函数中。不过你的思路是对的!

最新更新