回调函数中this指代问题


var obj = {
    //我想让this指代上面这个obj
    a:function(){
        setTimeout(function(){
            console.log(this);
        },100);
    },
    //好吧,曲折解决了
    b:function(){
        var me = this;
        setTimeout(function(){
            console.log(me);
        },100);
    },
    //如果我要把callback拿出来,又有问题了。。。
    c:function(){
        //这下不管我怎么在c和callback里倒来倒去的找变量,都不能在callback里找到最上面的那个obj了。。
        setTimeout(this.callback,100);
    },
    callback:function(){
        console.log(this);//我需要在这里找到obj..
    }
};
obj.a();
//obj.b();
//obj.c();

oop 回调函数 JavaScript

朵谢梅小先生 10 years, 11 months ago

atrl的方法解决了将callback函数剥离,并保持this引用的问题。
在比较先进的浏览器中可以使用这种方法:

c:function(){
                setTimeout(this.callback.bind(this),100);
        }

ie等浏览器可以自行扩展Function对象的prototype实现。但道理其实都是创建了新的函数。

此处的需求这样做就可以了。有时候会碰到事件处理函数需要解耦的情况,由于还要考虑解除绑定,会更复杂一些,需要自己写对象进行管理。

好纯的大叔 answered 10 years, 11 months ago

Your Answer