1、※ 對於普通函數(包括匿名函數),this指的是直接的調用者,在非嚴格模式下,如果沒有直接調用者,this指的是window。showMessage1()里setTimeout使用了匿名函數,this指向window。
2、※ 箭頭函數是沒有自己的this,在它內部使用的this是由它定義的宿主對象?決定。showMessage2()里定義的箭頭函數宿主對象為vue實例,所以它里面使用的this指向vue實例。
注:
【普通函數的
this
】
普通函數的
this
是由動態作用域決定,它總指向於它的直接調用者。具體可以分為以下四項:
this
總是指向它的直接調用者, 例如 obj.func() ,那么func()里的
this
指的是obj。
在默認情況(非嚴格模式,未使用
'use strict'
),如果函數沒有直接調用者,
this為window
在嚴格模式下,如果函數沒有直接調者,
this
為undefined
使用call,apply,bind綁定的,
this
指的是綁定的對象
1)全局函數中的this指向window
2)對象中的方法(函數)中的this,指向對象,理解:obj.m=function(){},m和fn等價,因此調用m也相當於調用fn,原理同3)
3)構造函數中的this指向調用該構造函數的實例對象
4)特殊this指向:
箭頭函數沒有綁定this,this繼承自外圍作用域,理解:查看上一層級的函數的this的指向,繼承它!!
5)綁定this指向:
