粗略地讲,函数的调用方式决定了this
的值,谁调用的函数,this
就指向谁。this
取值符合以下规则:
1.如果函数作为构造函数用,那么其中的this
就代表它即将new
出来的对象。
2.如果appl
、call
或bind
方法用于调用、创建一个函数,this的值就取传入的对象的值。
3.如果函数作为对象的一个属性时,并且作为对象的一个属性被调用时,函数中的this
指向该对象。比如当obj.method()
被调用时,函数内的 this
将绑定到obj
对象。
4.如果调用函数不符合上述规则,那么this
的值指向全局对象(global object)
。浏览器环境下this
的值指向window
对象,但是在严格模式下('use strict')
,this
的值为undefined
。
5.如果符合上述多个规则,则较高的规则(1 号最高,4 号最低)将决定this
的值。
6.如果该函数是 ES2015 中的箭头函数
,将忽略上面的所有规则,this
被设置为它被创建时的上下文
。