2010-06-29 47 views
2

我試圖用兩個對象創建一個函數調用鏈。Javascript中的嵌套函數參數和'this'上下文

我已經添加代碼中的註釋來描述我想要做的事:

function Huh(parentContext) { 
this.parentContext = parentContext; 
this.check = function() { 
    console.log(parentContext); 
} 
this.DoWork = function(successFunc) { 
    console.log('Huh.DoWork'); 
    successFunc('yay');  
};} 

function Thing() { 
this.nextSuccess = function(e) {  
    console.log('nextSuccess ' + e); 
}; 

this.success = function(e) { 
    console.log('success!! ' + e); 

    var h = new Huh(this); // It looks like 'this' doesn't mean the Thing context any more. ?!?! 
    //h.check();  
    h.DoWork(this.nextSuccess); // THIS BREAKS. 
}; 

this.fail = function() { 
    console.log('fail'); 
}; 

this.firstBit = function(successFunc, failFunc) { 
    var h = new Huh(this); 
    //h.check();   
    h.DoWork(this.success);  
}; 

// start with this function 
this.Go = function() { 
    this.firstBit(this.success, this.fail); 
};} 

這一切都休息,當我嘗試在Thing.success創建咦的第二個實例。

我嘗試通過this.nextSuccess,但它看起來像'這個'上下文是不一樣的。

請幫忙。

+2

當您使用嵌套函數時,請嘗試在縮進中反映這一點。它使閱讀起來更容易。 – Skilldrick 2010-06-29 09:46:59

+0

對不起。我試圖讓縮進工作,但代碼塊一直在打破。 – 2010-06-29 09:57:43

回答

7

在你的Thing功能的開始,把var that = this;。然後您可以使用that訪問Thingthis

+1

謝謝你。 我不認爲你可以解釋爲什麼它在原始代碼中失敗嗎?我很想得到更好的理解:) – 2010-06-29 11:47:05

+0

真棒:D謝謝你的幫助堆 – 2010-06-30 13:44:26