为回调中的内部函数隐式绑定它(避免使用“this”..)

时间:2014-06-05 02:07:01

标签: javascript

好的,我无法找到一个更好更清晰的标题,但基本上我已经得到了这个:

var obj = function () {
    return {
        hi: function (name) {
            console.log("HI! " + name);
        },
        fun1: (function (cllb, name) {
            //WRONG!! I'm binding the callback not the hi function
            var f = cllb.call(this, name)
        }).bind(this)
    }
}

我这样打电话给fun1

var q = new obj()
q.fun1(function () {
    hi("paco")
})

请注意我如何使用hi("paco")而非this.hi("paco")。我需要避免回调中的this。我知道它不是最实用和最逻辑的方式,但在我的真实代码中,原因更为明显。是否可以在Javascript中执行此操作?

2 个答案:

答案 0 :(得分:0)

除非您将hi作为参数传递给回调,否则无法只调用hi(..)。 JavaScript有lexical scopehi不在回调范围内。

  

是否可以在Javascript中执行此操作?"

答案只是

答案 1 :(得分:0)

也许你会得到最接近的。

function thing(){


    this.fun1 = function(cb){
        var b = 'this.'+cb();
        var c = new Function(b);
        c.call(this);
    };

}
var t = new thing();

thing.fun1(function(){
    return 'hi("paco");';
});