2016-11-16 131 views
0

請問您能告訴我什麼是snippet 1的錯誤?我對obj.discover()的期望輸出是3.我怎樣才能將this綁定到對象的箭頭函數方法?對箭頭功能感到困惑

'use strict' 

// Snippet 1 
var obj = { 
    data: 3, 
    discover:() => { 
    return this.data 
    } 
} 
obj.discover() // -> undefined 
obj.discover.bind(obj)() // undefined 

// but if I don't use the arrow notation, everything works 
// Snippet 2 
var obj2 = { 
    data: 3, 
    discover: function(){ 
    return this.data 
    } 
} 
obj2.discover() // -> 3 
+2

箭頭函數沒有自己的'this',使用該函數的常規函數​​ –

回答

2

箭頭函數不僅僅是一個語法糖,而且在某些行爲上也有所不同。在箭頭函數中,this始終指向函數定義時指向的對象。

+1

值得指出的是,在OP中,'this'是'obj'中'discover'創建時的全局對象。如果它是使用'new'等創建的對象,那麼在這個箭頭函數中使用'this'就可以。 –

+0

@JamesThorpe謝謝你的詳細解釋。 – anhldbk

+1

@dejavu_cmd_delt:非常感謝。 – anhldbk

0

箭頭函數不允許綁定。檢查MDN this參考:相對於功能 表情和不綁定自己的這個,參數,超,或 new.target

箭頭函數表達式有一個較短的語法。

箭頭函數會將this解析爲其詞彙範圍。