在成员函数回调中获取对象

时间:2011-11-19 02:57:14

标签: javascript callback

我有一个带有方法的对象,我想将其作为回调传递给函数。但是,在回调中,this不再引用我的对象。为什么不呢?

我很熟悉在传递函数文字时使用变量解决问题:

var obj = {
    a: function () {
        var me = this;

        console.log(this);

        setTimeout(function () {
            console.log(this); // Not obj
            console.log(me);   // This works!
        }, 100);
    }
};

在这种情况下我该如何解决?

var obj = {
    b: function () {
        setTimeout(this.callback, 100);
    },
    callback: function () {
        console.log(this); // =(
    }
};

1 个答案:

答案 0 :(得分:9)

是的,this在Javascript中可能有些棘手。问题是它的价值取决于how you call the function

obj.callback(); //ok

var f = obj.callback;
f(); //does not look like a method call
     //Javascript does not pass the this!

通常的解决方法是传递一个像b)中所做的包装回调,除了me变量的公用名是that(有时你也会看到self

var that = this;
setTimeout( function(){ return that.callback(); }, 300);

另一种方法是使用函数中的bind方法

setTimeout( this.callback.bind(this) , 300)

请注意,IE 8不支持绑定(在这种情况下您可能需要填充程序)。


更多信息:

Maintaining the reference to "this" in Javascript when using callbacks and closures