2017-03-02 28 views
3

這是一個JavaScript/ES6方法返回一個哈希組成的兩個方法... writeA和_write。我們想從哈希之外調用writeA,並且這個方法自己調用下面定義的_write來完成它的工作。如何在JavaScript哈希函數中調用另一個在同一個哈希安全

getHash =() => { 
    return { 
     writeA:() => { 
      console.log(this); 
      this._write('a'); 
     }, 
     _write: (value) => { 
      console.log(value); 
     } 
    }; 
}; 

getHash().writeA(); 

當最後一行得到執行時,解釋器說這個._write不是函數。 _write具有相同的效果。如何從writeA內引用_write?

回答

4

您正在使用=>作爲您的函數定義,它完全改變了this綁定的工作方式。使用=>創建的函數與this一樣,與它們在創建它們的環境(範圍)中的綁定。由於getHash()本身是=>函數,因此在定義getHash的上下文中this的值將是writeA()中可見的值。

如果您通過getHash()返回值並使用function()語法重寫函數,則會得到您期望的行爲。

+0

認爲'=>'只是一個方便的簡寫是錯誤的。這是,但它有更重要的影響。 – Pointy

+0

這個答案是完美的...我一定會閱讀更多關於=>及其含義。謝謝! – RooSoft

+1

很好的答案。 OP確實節省了幾秒鐘輸入幾個字符。然後花費幾分鐘/幾小時修復它。食物的思想... – user949300

相關問題