如何从回调中访问此类成员?
Posted
技术标签:
【中文标题】如何从回调中访问此类成员?【英文标题】:How to get access to this class member from within a callback? 【发布时间】:2011-01-03 20:07:55 【问题描述】:这个问题最好用一些代码来解释,所以在这里:
// 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
?
【问题讨论】:
【参考方案1】:您需要通过创建一个引用它的局部变量来扩展this
的范围,如下所示:
function a_class_a_function()
var self = this;
AFunctionThatTakesACallback(function()
console.log(self.a_var);
);
之所以需要这样做是因为AFunctionThatTakesACallback
函数中的this
引用与当前对象的this
不同,它可能会引用全局window
object。 (通常不是你想要的)。
哦,我有没有提到这叫做closure?
【讨论】:
完美。这很好用......你很好地解释了这个问题。 @George Edison 谢谢!我很感激! :)【参考方案2】:您可以尝试使用函数对象的call 方法,它可以让您为此指定一个值:
myFunction.call(this, args...)
但我认为在这种情况下,将“this”作为参数之一传递给回调可能会更直接。
【讨论】:
【参考方案3】:当您调用instance.a_function()
时,您实际上是在将instance
称为this
调用a_class_a_function
,因此您可以像这样修改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
。
【讨论】:
以上是关于如何从回调中访问此类成员?的主要内容,如果未能解决你的问题,请参考以下文章