首先要注意的是,JS中的this的指向只有在函數被調用后才能被確定,在函數的定義階段是確定不了的
在JS中this的指向一般有四種規則
- 一個函數作為對象的方法被調用時,這個函數中的this指向調用它的對象
- 以構造函數的形式進行調用時,this指向new出來的實例對象
- 以函數的形式直接進行調用時,這個函數中的this指向window
- 通過call()和apply()等方法調用時,this是指定的那個對象
在JS的框架下,vue中this的指向有以下規則
- data中的this指向window
- 所有的生命周期函數中的this都指向vue實例對象
- vue的v-on指令中可以接收JS語句,其中的this是window(vue組件中的v-on指令除外)
- computed中的this指向vue實例對象
- methods中的this有以下幾種情況
- 普通函數的this指向vue實例對象
- 箭頭函數沒有自己的this,因此this指向其宿主對象的this(注意宿主對象是函數對象(它被調用后this的指向要進行具體分析),簡單對象沒有this)
- 普通函數形式的回調函數的this是window,箭頭函數形式的回調函數的this遵循箭頭函數的原則(大多數情況下是vue實例對象)