开发者

Accessing 'this' in Javascript closure

This is more of a sanity check than anything else. I've found that when working with closures in Javascript I often use the following pattern to access the enclosing class from within the function:

MyClass.prototype.delayed_foo = function() {
    var self = this;
    setTimeout(function() {
        self.开发者_如何学Pythonfoo(); // Be nice if I could use 'this' here
    }, 1000);
};

Obviously this works just fine, and it's not even a big hassle to work with. There's just this little itch in the back of my brain that says 'You're making this too complicated, dummy!' Is this the commonly accepted pattern?


This is the commonly accepted pattern with the exception that that is often used instead of self.


You can pull a sneaky using a binding function like this:

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

and then changing your call to

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

jsfiddle example:

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜