Vue watch $route時的箭頭函數

和function不同之處

src/core/instance/state.js的Vue.prototype.$watch方法中
有三個參數

expOrFn: string | Function,
cb: any,
options?: Object

cb是watch對象中"$route"對象指定的回調函數,此處使用箭頭函數
watch: {
    ‘$route’: ()=>{ console.log(this) }
}

	if (options.immediate) {
      try {
        cb.call(vm, watcher.value)
      } catch (error) {
        handleError(error, vm, `callback for immediate watcher "${watcher.expression}"`)
      }
    }

看這句👉 cb.call(vm, watcher.value)
call的時候是帶着this指向vm去的,正常的function內會指向這個對象,
箭頭函數是存在於他定義時的環境(他所處的宿主對象),由於定義時還未綁定到vm對象,故此時(瀏覽器中)指向Windows對象。

總之,就是箭頭函數的this指向引起的錯亂,達不到預期

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章