访问';这';在Javascript闭包中

访问';这';在Javascript闭包中,javascript,Javascript,这更像是一次精神检查。我发现在Javascript中使用闭包时,我经常使用以下模式从函数中访问封闭类: MyClass.prototype.delayed_foo = function() { var self = this; setTimeout(function() { self.foo(); // Be nice if I could use 'this' here }, 1000); }; 很明显,这很好用,而且使用起来也不是什么大麻烦。我的大脑

这更像是一次精神检查。我发现在Javascript中使用闭包时,我经常使用以下模式从函数中访问封闭类:

MyClass.prototype.delayed_foo = function() {
    var self = this;
    setTimeout(function() {
        self.foo(); // Be nice if I could use 'this' here
    }, 1000);
};

很明显,这很好用,而且使用起来也不是什么大麻烦。我的大脑后面有一点痒,那就是‘你把事情弄得太复杂了,笨蛋!’这是普遍接受的模式吗?

这是普遍接受的模式,除了经常使用
而不是
self
之外,您可以使用如下绑定函数来拉一个鬼鬼祟祟的模式:

var Binder = function(fnc, obj) {
    return function() {
        fnc.apply(obj, arguments);
    };
};
然后把你的电话改成

MyClass.prototype.delayed_foo = function() {
    setTimeout(Binder(function(){
        this.foo("Lols");
    },this), 1000);
};
JSFIDLE示例:


很高兴知道。我刚刚挑选了一件感觉熟悉的东西。:)(巨蟒迷!)好吧,这当然是一个有趣的小把戏,但通读代码我感觉自己又回到了C#中,再次绑定匿名代理!可能不值得付出性能开销和额外的代码复杂性,这样我就可以调用我的类var“this”。不过,创意A+!