2013-02-20 570 views
0

我想知道是否有一個優雅的方法來做下面的代碼,而不必首先調用父對象「那個」。如果我嘗試從ajax請求中使用「this」,它顯然會引用Ajax對象。從內部對象訪問父對象

至少這就是我認爲的意思。

var ObjectA = Class.create(); 

ObjectA.prototype = { 
    initialize: function() { 
    //Workaround I use 
    that = this; 
    }, 

getData: function(bounds) { 
    //ajax to get some data  
    url = "http://www.data.com/";  

    new Ajax.Request(url, { 
    method: 'get', 
    onSuccess: function(response) { 
    // Handle the response content... 
    that.workData(response.responseText); 
    //THIS IS MY DOUBT. 
    //How do I access the parent object without having to previously calling it "that" first? 
    } 
    }); 

}, 
workData: function(data){ 
//do something with the data 
} 

} 

var test = new ObjectA(); 
test.getData(); 

回答

2

嗯.. that是無法訪問的getData內側,因爲它是一個不同的範圍比initialize開始。這是很常見的重命名this因此它可以在內部範圍的環境中使用,並且你可能會想用什麼this應該是在onSuccess背景下,無論如何,但既然你問:

onSuccess: function (response) { 
    //this is now ObjectA 
}.bind(this); 

在行動:http://jsfiddle.net/ExplosionPIlls/hY3Ca/

+0

這是唯一我沒有這麼遠的工作。我會嘗試你的建議!謝謝! – 2013-02-20 00:31:02

0

使用bind()

... 
onSuccess: function(response) { 
    this.workData(response.responseText); 
}.bind(this) 
...