我经常有这样的代码:
function Object() {
}
Object.prototype.getData() {
// THIS LINE:
var object = this;
$.ajax({
url: '...'
, success: function(data) {
object.onLoadData(data);
}
})
}
var o = new Object();
o.getData();
我的问题:上面的“var object = this”位的首选范例是什么?我见过这个:
var self = this;
哪个好看,我可能会偷这个方法。从匿名函数中引用父对象的最常用方法是什么?有更聪明的方法吗?我经常发现自己把“var object = this;”在大多数对象方法的顶部,似乎可能有一些棘手的方法来避免这种情况。
谢谢!
答案 0 :(得分:2)
Crockford似乎更喜欢var that=this
。如果您正在使用他们似乎使用的ExtJs库
var me= this;
。
当真正归结为它时,变量的名称并不重要。确保你使用与你的同伴一致的东西,这对新手程序员来说是有意义的。
答案 1 :(得分:2)
鉴于您的代码,请不要使用变量。
使用context:
参数设置回调中的this
值。
Object.prototype.getData = function() {
$.ajax({
url: '...',
context: this, // <-----------set the context for the callbacks
success: function(data) {
this.onLoadData(data);
}
});
};
如果问题并非只涉及$.ajax
,那么我会使用bind()
[docs]将this
值绑定到该函数。
function successCallback(data) {
this.onLoadData(data);
}
Object.prototype.getData = function() {
$.ajax({
url: '...',
success: successCallback.bind( this );
});
};
如果您需要支持不具有.bind()
的浏览器,那么我提供的文档链接中有一个垫片可以包含。
答案 2 :(得分:1)
在我的代码中,我使用var that = this;
来表示这个用例 - 我也看过self
,虽然对我来说有点混乱,但在其他语言中它是一个保留关键字。
据我所知,没有任何其他方法可以解决这个问题,但只要您选择一个仅用于此案例的 关键字,并在整个代码库中一致地使用它,它就是一个漂亮的干净的处理方式。我会避免像object
这样的var名称,因为你很可能会在其他地方使用它们,并为自己或维护代码的人创造一个令人困惑的情况。
答案 3 :(得分:0)
不是真的(我知道)。我总是使用that
作为名称,虽然它比良好做法更幽默。