前言
看過很多文章都有介紹this,總感覺沒辦法很直覺的了解this這東西,
但在寫java、C#的時候,我們不會覺得this很難懂,this就是類別自身的概念, 回到javaScript上面,用上述方式解釋卻不太合適。
this跟window的關係?
當有人問你this是什麼的時候,打開F12輸入this後得到的是window, 這時要怎麼回答呢?
是window嗎?
這個回答想必其他人不會買單, 因為在嚴謹模式下是undefined,但是MDN非嚴謹模式下會將undefined、null置換為全域變數window。
this到底是什麼?
在函式中的this就是 呼叫它的那個物件自身, 上圖內的兩個console.log的結果是否跟你們想的一樣呢?
所以沒有其他的物件呼叫該函式的話,就會是window這個物件直接呼叫函式,故此時this就是window。 上圖內window.test(); 代表的是window呼叫test()意思。
但如果有其他的物件呼叫函式的話,this就是該物件自身了。
Arrow function (箭頭函式) 與 this
arrow function並沒有自己的this,它(this)是宣告當下的環境,就是離arrow function最近的那個外層物件了。
整理
- this就是 呼叫方法的物件。
- arrow function沒有自己的this,透過 取得最近的那個物件來當this。