这更像是一种健全性检查。我发现在使用Javascript中的闭包时,我经常使用以下模式从函数中访问封闭类:
MyClass.prototype.delayed_foo = function() {
var self = this;
setTimeout(function() {
self.foo(); // Be nice if I could use 'this' here
}, 1000);
};
显然这种方法很好,而且使用起来也不是很麻烦。在我的脑后只有这个小小的痒,说“你让这太复杂了,假的!”这是普遍接受的模式吗?
答案 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例子: