最好用一些代码解释这个问题,所以这里是:
// a class
function a_class {
this.a_var = null;
this.a_function = a_class_a_function;
}
// a_class::a_function
function a_class_a_function() {
AFunctionThatTakesACallback(function() {
// How to access this.a_var?
});
}
// An instance
var instance = new a_class();
instance.a_function();
在AFunctionThatTakesACallback()
的回调中,如何访问this.a_var
?
答案 0 :(得分:7)
您需要通过创建引用它的局部变量来扩展this
的范围,如下所示:
function a_class_a_function() {
var self = this;
AFunctionThatTakesACallback(function() {
console.log(self.a_var);
});
}
您需要执行此操作的原因是因为this
函数中的AFunctionThatTakesACallback
引用与当前对象不同this
,它可能会引用全局window
1}}对象代替。 (通常不是你想要的)。
哦,我是否提到这称为closure?
答案 1 :(得分:0)
答案 2 :(得分:0)
当您致电instance.a_function()
时,您真正使用a_class_a_function
instance
作为this
进行呼叫,因此您可以像这样修改a_class_a_function
:
function a_class_a_function() {
var self = this;
AFunctionThatTakesACallback(function() {
// do something with self.a_var
});
}
此处的问题是,如果您尝试在未调用实例的情况下调用a_class_a_function
,则this
可能会引用全局对象window
。