我有以下(簡化)代碼:如何在我的情況下正確使用Javascript'this'?
var myModule = {
submitDummyForm: function(){
console.log(this); // the right object is logged out
var that = this; // keep a reference
$.ajax({
type:'POST',
url: 'http://localhost/',
data: {dummyData: 'something'},
dataType: 'json',
success: that.dummyFormSuccess
});
},
dummyFormSuccess: function(data){
console.log(this); // 'this' is logged out as some foreign object, most probably jQuery.ajax object
}
}
它導致「這」丟失在dummyFormSuccess,不管我用this.dummyFormSuccess或that.dummyFormSuccessfor作爲參數爲我ajaxSubmitForm() 。
但正如我需要下面的代碼被執行:
var myModule = {
submitDummyForm: function(){
console.log(this); // the right object is logged out
var that = this; // keep a reference
$.ajax({
type:'POST',
url: 'http://localhost/',
data: {dummyData: 'something'},
dataType: 'json',
success: function(data) {
that.dummyFormSuccess(data);
}
});
},
dummyFormSuccess: function(data){
console.log(this); // now 'this' is logged out correctly as the real myModule object
}
}
我仍然不是很舒服的JavaScript高級的話題,但我已經知道,「這」可能會被重新定義,這取決於它用來。我想如果我使用'that'來存儲對'this'的引用,它應該保留我的'this'在被調用的函數中。看起來很奇怪,我可以在一個環繞函數中調用that.dummyFormSuccess(data),它在裏面得到正確的'this',但是如果我將它賦值給$ .ajax成功,我的'this'就會丟失。
任何人都可以解釋一下,'這個'在我的情況下迷失了嗎?爲什麼它在第二個例子中工作正常?這是與jQuery的問題(也許jQuery.ajax()覆蓋我的'這'在我的情況)或只是語言的功能?
錯誤。 '這個'並不意味着這個功能。 – SLaks