2011-08-03 180 views
1

我讀克羅克福德的JavaScript:好的部分,並正在與這段代碼從教訓調用模式亂搞:該double方法被稱爲混淆`this`關鍵字

var br = "<br />"; 

var add = function(a,b) { 
    a + b; 
} 

var myObject = { 
    value: 0, 
    increment: function(inc) { 
     this.value += typeof inc === "number" ? inc : 1; 
    } 
}; 

myObject.increment(2); 
document.write(myObject.value + br); // 2 

myObject.increment(); 
document.write(myObject.value + br); // 3 

myObject.increment(3); 
document.write(myObject.value + br); // 5 

myObject.double = function() { 
    var that = this; 

    var helper = function() { 
     that.value = add(that.value,that.value); 
      return that.value; 
    }; 

    helper(); 
}; 

myObject.double(); 
document.write(myObject.value);  //undefined 

後,我得到undefined。有誰知道爲什麼?

+0

我不認爲這是問題的根源,但使用保留字作爲,不建議在JavaScript標識符。 'double'是一個保留字。 – Jacob

+0

@Jacob:50%正確:允許Javascript中特定數據類型的計劃不再存在,因此double不再位於最新標準中的保留字列表中。由於許多人仍然使用早期的瀏覽器,這被定義爲保留字,所以應該避免使用它。 – Pindatjuh

回答

10

「加入()」 函數缺少一個return聲明:

var add = function(a,b) { 
    return a + b; 
} 

沒有return聲明實際上"returns" undefined的功能。

+0

你打了我18秒:) –

+0

對不起老兄 - 這些問題總是如此令人興奮 – Pointy

+0

@波蒂 - 工作。謝謝。 – dopatraman

5

我想你應該在add函數返回結果:

var add = function(a,b) { 
    return a + b; 
}