2016-08-16 77 views
5

我試圖訪問該我的箭函數內裏:這是不明確的箭頭功能

import myObject from '../myObjectPath'; 
export const myClass = Fluxxor.createStore({ 
    initialize() { 
     this.list = []; 
     this.id = null; 
    }, 
    myOutsideFunction(variable1) { 
     // here this in NOT undefined 
     myObject.getMyList(this.id, (myList) => { 
      // here this in undefined 
      this.list = myList; 
     } 
    }); 
)}; 

但箭頭函數內部它在馬回調函數,這是不確定的!

我使用通天transpile代碼:

myOutsideFunction: function myOutsideFunction() { 
    var _this = this; 
    myObject.getMyList(function (myList) { 
     _this.list = myList; 
    }); 
}, 
+0

綁定'this',或將其存儲在箭頭函數範圍之外的臨時變量中。 – Jite

+0

'this'的值取決於調用myOutsideFunction的方式。它怎麼叫? –

+1

@Jit使用箭頭函數的全部想法是不必綁定這個! – Besat

回答

4

如果thisundefined箭頭函數中,它是不確定的箭頭之外也是如此。箭頭功能只是捕捉周圍範圍的this

在這種情況下,您聲明myOutsideFunction作爲對象字面值的方法,並且永遠不會綁定它或執行其他任何可以將其與對象調用爲this的對象。

調試時,請記住,轉換器可以重命名變量(並且必須重命名this才能正確捕獲)。即使原始值不是原始值,在沒有包含重命名的源映射的控制檯中使用原始名稱也會顯示undefined。確保您在手錶或控制檯命令中使用了轉錄名稱。

+0

奇怪的原因是,它在函數調用之前被寫入'//這裏在NOT undefined'中,所以'嚴格地說,這個'不應該在箭頭函數 –

+0

@ oliv37中未定義,這是不可能的。箭頭功能是一種語言功能,並且始終會收到相同的「this」。我不知道有任何運行時出現錯誤(因爲它對箭頭函數非常重要)。 – ssube

+0

這是我雖然!它不應該是可能的!但我已經測試了幾次,並且我在內部的箭頭函數中獲得了未定義的內容,但是在調用它之前它並不是未定義的 – Besat