Toji
Toji

Reputation: 34498

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.foo(); // 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?

Upvotes: 6

Views: 155

Answers (2)

david
david

Reputation: 18258

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/

Upvotes: 4

aaronasterling
aaronasterling

Reputation: 70984

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

Upvotes: 6

Related Questions