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指向: