javascript中的this使用場景以及箭頭函式中的this

廊橋夢醉發表於2018-09-16

this總是指向一個物件,有時指向全域性物件,有時指向構造物件,有時指向DOM物件

1. 作為物件的方法呼叫

做為物件的方法呼叫時 this 指向物件本生

img_095f7d70e33c17d77618109aae91f0b3.png

2. 作為普通函式被呼叫

普通函式裡的this總是指向全域性變數

img_c9fd0cf854d2df08dc7f21e27dbbe2bb.png

物件的方法複製給變數,在通過變數來呼叫後物件的方法變成了普通函式

img_afaad9999c297a7d985f4dac13d4ddca.png

觀看這個例子發現:

getName1 = Person.getName  是把getName1指向Person.getName方法的記憶體地址(方法本身沒有被執行),其本質是個函式,所以在使用getName1() 時就是呼叫普通函式

getName2 = Person.getName() 是把Person.getName的返回值(已經執行了)bingxl賦值給getName2

對兩個變數經行typeof操作

img_404e7a75088cab84583b03923e4cebf0.png

3. DOM事件觸發函式裡的this

DOM事件觸發函式裡的this指向DOM節點本身

img_98c74bacaff7d51de5fc5a10d3999cb8.png

test() 是一個普通函式,所以test裡的this指向了全域性物件window

4. 構造器呼叫

使用new運算子呼叫建構函式時會返回一個物件,建構函式裡的this一般就指向返回的物件

當建構函式使用return顯式的返回一個物件時new操作符返回的就是顯式返回的物件

img_99e6e854750048904a5726b0a92bc1ce.png

5. call , apply 和 bind

通過call 或apply呼叫會改變this的指向傳入的物件

img_a4d2d0284b12ab0e5916ece24b29adb1.png

6. 箭頭函式中的this

箭頭函式中的this就是定義時所在的this, 也就是說 箭頭函式本身沒有this。

箭頭函式也可以使用bind, call , applay來改變this指向

img_c03f03c6c827770492df78b6f1cf0cbc.png

對比 arrow 和 sub 函式可以看出


相關文章