2016-07-26 159 views
0

首先我想這一點 -爲什麼「this」在胖箭頭函數定義中未定義?

const profile = { 
    name: 'Alex', 
    getName: function(){ 
     return this.name; 
    } 
}; 

工作正常。現在我用胖箭頭嘗試同樣的事情。在這種情況下,這個「未來」是未定義的。

const profile = { 
    name: 'Alex', 
    getName:() => { 
     return this.name; 
    } 
}; 

這給了我一個錯誤

TypeError: Cannot read property 'name' of undefined

我的教訓是,胖箭頭語法是更好的方式處理隱含的「本」。請解釋爲什麼會發生這種情況。

+0

是的,這個問題不回答這個問題:http://stackoverflow.com/questions/31095710/methods-in-es6-objects-using-arrow-functions –

+0

HTTPS://developer.mozilla。 org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions – Dellirium

+0

也是[函數與函數聲明/表達式的重複:它們是否等同/可交換?](http://stackoverflow.com/q/34361379/218196 ) –

回答

1

與常規功能一樣,Arrow功能沒有this或它們自己的,只有自己的常規功能和全球範圍以及this

這意味着,只要this將在箭頭功能可按被稱爲,它會開始看時查找範圍找到this值,或者在這種情況下,最多也發現,該object是不是有一個this ,因此它達到了全球範圍,並將this的價值與全球範圍綁定,在那裏它找不到任何東西。這兩個例子將解決你的疑問。功能

var obj = { 
    a : 'object???', 
    foo : function() { 
     return (() => { 
      console.log(this.a) 
     })(); 
    } 
}; 

var a = 'global!!!'; 

obj.foo(); 

這裏內

var obj = { 
    a : 'object???', 
    foo :() => { console.log(this.a) } 
}; 

var a = 'global!!!'; 

obj.foo();    // global!!! 

包裝箭頭,我試圖解釋this的behvauiour在深入箭頭。

https://github.com/anirudh-modi/JS-essentials/blob/master/ES2015/Functions/Arrow%20functions.md#how-this-is-different-for-arrow-functions