我已经看了几个其他的例子,但它们对于我想要做的事情来说都非常复杂,并且不明白如何将它们应用到我的问题中。所以这是我希望的简单问题:
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正在努力。
答案 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);
}
}