在Javascript闭包中访问'this'

时间:2011-01-27 05:41:50

标签: javascript

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

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

显然这种方法很好,而且使用起来也不是很麻烦。在我的脑后只有这个小小的痒,说“你让这太复杂了,假的!”这是普遍接受的模式吗?

2 个答案:

答案 0 :(得分:6)

这是普遍接受的模式,但经常使用that代替self

答案 1 :(得分:4)

你可以使用像这样的绑定函数来偷偷摸摸:

var Binder = function(fnc, obj) {
    return function() {
        fnc.apply(obj, arguments);
    };
};

然后将您的通话更改为

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

jsfiddle例子:

http://jsfiddle.net/ctrlfrk/6VaV6/