this 調用方式:「箭頭函式 (ES6)」內容
以及 Vue.js 的 this 指向
箭頭函式 (ES6)
箭頭函式有以下幾個特點:
箭頭函式與傳統函式最大不同處是在 this 綁定是不一樣的
- 範例 1
「箭頭函式」是沒有自己的this,如下方範例
1 | var data = { |
num 用「箭頭函式」則會指向 Window
改用「傳統函式」就可以正確指向 data 物件
- 範例 2
setTimeout是屬於簡易呼叫,簡易呼叫的情況下,this就會指向window
若用「傳統函式」則會指向Window
1 | var data = { |

但若改用「箭頭函式」則會指向 data 物件
1 | var data = { |

所以當看到「箭頭函式」裡面有
this時候,可以先當「箭頭函式」不存在,這個this就用外層他作用域的this
this 不同,導致 DOM 的 this 也會指向不同位置
這邊要注意,因為箭頭函式的 this 指向位置是不一樣的,所以使用 this 要注意使用的是「傳統函式」還是「箭頭函式」,下方範例是透過 click 方式把 DOM 位置給取出
1 | <p>項目 1</p> |
點擊畫面的文字內容後,console 就顯示點擊的位置
也就是 console.log(this) 指的是 el 這個 DOM 元素

改為「箭頭函式」,存檔後一樣點文字,會發現他指向 Window
因為「箭頭函式」沒有屬於他自己的 this 所以改為「箭頭函式」,他的 this 就會指向全域
也因為「箭頭函式」沒有自己的 this 當然也無法透過 call、apply、bind 的方式重新給予 this
此為「箭頭函式」指向是不一樣的,所以也無法作為建構函式使用
Vue.js this 的指向
如同六角學院講師 卡斯伯所寫的文章提到:
Vue實際運作時,元件內的物件、函式等等均會被向上拉,methods,computed等等均不會存在,所以並非以原始碼而是以實際運行的狀態為主methods內的function及data內的內容均在元件物件頂層。
元件下的函式的this就會直接指向該元件,所以methods內的function的this自然就能夠使用元件內的text資料。
但若是 method 或是 computed 裡面的 function 有使用其他 function 需注意 this 指向
1 | <div id="app"> |
結果如圖
這是因為原本的 this 指的是 Vue 這個物件,在經過 filter 後,此時的 this 已
經不是一開始的 this,而是 Window
如下圖在 filter 用 console.log(this) 就可看到指向 Window

若改用 console.log(vm) 則指向 Vue
而且也能正確顯示資料