如何从回调中访问此类成员?

时间:2011-01-03 20:07:56

标签: javascript class class-members

最好用一些代码解释这个问题,所以这里是:

// 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

3 个答案:

答案 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)

您可以尝试使用函数对象的call方法,该方法允许您为此指定值:

myFunction.call(this, args...)

但我认为在这种情况下,将'this'作为参数之一传递给回调可能会更直接。

答案 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