如何让setTimeout引用对象的上下文?

时间:2013-04-08 21:15:43

标签: javascript object this settimeout

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

}

myObj.go()   //logs out mike
setTimeout(this.myObj.go,200)  //logs out (emptyString)

6 个答案:

答案 0 :(得分:1)

Try this

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

有几种方法:

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

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

请注意,旧版浏览器不支持.bind,因此可能需要填充以支持它。以下是有关该方法的一些信息:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind

答案 3 :(得分:1)

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

}

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

答案 4 :(得分:1)

试试这个

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

}

myObj.go();   //logs out mike
setTimeout(function(){
    myObj.go(); //logs out mike too
},200);

答案 5 :(得分:0)

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

setTimeout(this.myObj.go,200)

应该是

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

未定义,因为this.myObj不在setTimeout的范围内,也不包含在匿名函数或变量函数中。你虽然走在了正确的轨道上!