Javascript SetTimeout变量访问

时间:2013-10-13 17:48:19

标签: javascript oop settimeout

我已经看了几个其他的例子,但它们对于我想要做的事情来说都非常复杂,并且不明白如何将它们应用到我的问题中。所以这是我希望的简单问题:

function myObject(){
this.aVar  = 0;

var aFunction = function(aParam){
    console.log(aParam);
}

this.theCallerFunction = function(){
    setTimeout(function(){ aFunction(this.aVar)},5000);
}

}

问题是在aFunction内部,参数值是“未声明”,而不是0,因此我打印“未声明”。有人可以给我一个简单的解决方案,并解释一下这里发生了什么吗?

我多年来一直在做面向对象的c#和java,而javascript中的oo正在努力。

1 个答案:

答案 0 :(得分:3)

你有几个选择。您可以在现代浏览器中使用.bind()或将this放入您可以访问的变量中:

function myObject(){
    this.aVar  = 0;

    var aFunction = function(aParam){
        console.log(aParam);
    }

    // save copy of this that can be accessed from callback
    var self = this;
    this.theCallerFunction = function(){
        setTimeout(function(){ aFunction(self.aVar)},5000);
    }
}