2014-08-31 60 views
0

我有一個javascript命名空間的問題。從ajax回調函數調用方法的更優雅的方法

我想從ajax回調函數調用secondMethod,但我不知道如何獲取它的引用。 我已經這樣做了。但這個參數的變量對我來說似乎很尷尬。整個建築難以閱讀。

因此,我在那裏尋求幫助,並回答如何更好地改寫它。

var testObject = new TestObject(); 
testObject.firstMethod("hello world!"); 

function TestObject() { 
    var thisReference = this; 

    this.firstMethod = function(firstParam) { 
     ajaxFunc(firstParam, function(ajaxResult) { 
      thisReference.secondMethod(ajaxResult); 
     }); 
    }; 

    this.secondMethod = function(secondParam) { 
     alert("secondMethod " + secondParam); 
    }; 

} 

function ajaxFunc(hello, callBack) { 
    callBack(hello); 
} 

非常感謝。

Ondra

回答

0

喜歡的東西,你在做什麼,是做的常用方法。使用:

var that = this; 

或:

var self = this; 

是常見的名字,讓您的原有範圍的保持。

另一種選擇(我更喜歡)是將this對象綁定到您調用的方法,以便您可以在回調中訪問它。這看起來像這樣:

this.firstMethod = function(firstParam) { 
    ajaxFunc(firstParam, function(ajaxResult) { 
    this.secondMethod(ajaxResult); 
    }.bind(this)); 
}; 

希望有所幫助。

+0

相反,使用'ajaxFunc(firstParam,this.secondMethod.bind(this))' – Bergi 2014-08-31 16:15:58

+0

感謝您快速回答Antiga。綁定()看起來不錯。 Bergi:謝謝。但是我不能因爲在調用secondMethod之前更多地使用代碼。它只是簡化的代碼。 – 2014-08-31 16:33:56