首先明白一點,JavaScript中的this指向只與函數的調用方式有關。判斷this指向誰,可以用下麵四條規則,並且四條規則的優先順序順序是從上到下的: 1. 如果函數是通過new操作符調用的,那麼this指向通過new創建的新對象; 2. 如果函數是通過call或apply方法調用的,那麼this ...
首先明白一點,JavaScript中的this指向只與函數的調用方式有關。判斷this指向誰,可以用下麵四條規則,並且四條規則的優先順序順序是從上到下的:
1. 如果函數是通過new操作符調用的,那麼this指向通過new創建的新對象;
2. 如果函數是通過call或apply方法調用的,那麼this指向call或apply方法內的那個對象參數;
3. 如果函數是通過上下文對象調用的,即obj.foo()這種形式,那麼this指向這個上下文對象;
4. 如果以上都不是,函數直接通過不加修飾的函數名調用,那麼this指向全局對象。如果函數體是在嚴格模式下,this指向undefined。
但是ES6中的箭頭函數的this不遵循上述四條規則。具體來說,箭頭函數會繼承外層函數調用的this指向。