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/
精彩评论