who is self?又跟 this 有何差異?
前言
實際開發上來講,其實是有機會看到這個單字,所以就來了解一下 self
是什麼以及它與 this
有何差異。
self 與 this 的關係
self
非常的簡單,當你在瀏覽器上輸入 self
的時候,你會得到一個 window
物件,而這個 window
物件就是瀏覽器本身。
這邊我們也知道一件事情 this
在正常狀況下直接呼叫會形成所謂的簡易呼叫,因此會指向到 window
:
1 | self === this; // true |
感覺彼此很類似對吧?此刻你會不會認為它的運作模式跟 this
一樣呢?先不要急,我們先繼續看下去。
self
還有一些很有趣的地方,例如:
1 | window === self; // true |
應該覺得很混亂了吧?先來解釋一下它是否與 this
運作方式相同,先看一段範例:
1 | var myName = 'Ray1' |
猜到答案了嗎?答案是:
1 | var myName = 'Ray1'; |
奇妙吧?這邊我們可以驗證一件事情,代表著 self
不管怎麼樣都是指向在 window
,並不會隨著你呼叫方式而改變指向,這邊也額外出一個題型給你試著思考結果:
1 | function fn () { |
而通常來講可能會看到有些人這樣宣告變數儲存 this
:
1 | var self = this; |
但是在某些狀況下可能會發生一些問題,因此通常會建議改命名為以下:
1 | var that = this; |