我已经定义了一个名为MyClass
的类,我为它定义了两个方法myMethod1
和myMethod2
:
function MyClass() {}
MyClass.prototype.myMethod1 = function() {...};
MyClass.prototype.myMethod2 = function() {...};
在myMethod1
内部,我使用jQuery,并在那里定义了一个回调闭包:
MyClass.prototype.myMethod2 = function() {
$.jQuery({success: function(data) {
this.myMethod2();
}, ...});
}
现在问题是this
不再指代MyClass
。问题是我怎么能参考它?目前我已将其分配给名为thisObj
的变量并以这种方式访问它:
MyClass.prototype.myMethod2 = function() {
var thisObj = this;
$.jQuery({success: function(data) {
thisObj.myMethod2();
}, ...});
}
是否有更好的方法可以从嵌套在MyClass.this
的闭包中访问myMethod2
?
提前致谢。
答案 0 :(得分:1)
你的解决方案非常好。既然你已经有一个封闭,也可以使用它,这绝对没问题。
但如果您愿意,可以改为使用jQuery.proxy
,如下所示:
MyClass.prototype.myMethod2 = function() {
$.jQuery({success: jQuery.proxy(function(data) {
this.myMethod2();
}, this), ...});
}
但是,您的原始解决方案并没有错。但是,当你想在许多不同的地方重用一个函数,或者当你还没有一个闭包并且不想引入一个函数时(或许因为它会关闭),使用proxy
可能会有所帮助很多不相关的东西)。关于proxy
的好处是,它会在一组受控制的东西上创建一个闭包,而不是在当前范围内。
答案 1 :(得分:1)
您可以将此引用传递给该函数,但您的解决方案似乎对我来说很好。你只是使用Javascript的词法作用域规则,那有什么不对?
答案 2 :(得分:1)
您使用的方法通常称为“该引用”,因为名称that
通常用作this
引用副本的名称。例如,请参阅Crockford关于JavaScript的讨论。