JavaScript中 this 关键字

同步时的情况 

一,单独使用 this,它指向全局(Global)对象,即window对象。

JavaScript中 this 关键字JavaScript中 this 关键字

 

二,在对象方法中, this 指向调用它所在方法的对象。

同步:且为function时:this指向调用当前方法的对象

JavaScript中 this 关键字JavaScript中 this 关键字

JavaScript中 this 关键字JavaScript中 this 关键字

注意下面这个例子,和上面这个例子进行对比:

JavaScript中 this 关键字JavaScript中 this 关键字

结论:this永远指向的是最后调用它的对象,也就是看它执行的时候是谁调用的。上例中虽然函数fn是被对象b所引用,但是在将fn赋值给变量j的时候并没有执行所以最终指向的是window。

JavaScript中 this 关键字JavaScript中 this 关键字

这里之所以对象a可以点出函数Fn里面的user是因为new关键字可以改变this的指向,将这个this指向对象a,为什么说a是对象,因为用了new关键字就是创建一个对象实例,理解这句话可以想想我们的例子3,我们这里用变量a创建了一个Fn的实例(相当于复制了一份Fn到对象a里面),此时仅仅只是创建,并没有执行,而调用这个函数Fn的是对象a,那么this指向的自然是对象a,那么为什么对象a中会有user,因为你已经复制了一份Fn函数到对象a中,用了new关键字就等同于复制了一份。

 

同步,且为箭头函数时:this指向window

JavaScript中 this 关键字JavaScript中 this 关键字

三,函数使用中,this 指向函数的所属者,即window对象。

同步,且为function时:this指向window

JavaScript中 this 关键字JavaScript中 this 关键字

同步,且为箭头函数时:this指向window

JavaScript中 this 关键字JavaScript中 this 关键字

四,在 HTML 事件句柄中,this 指向了接收事件的 HTML 元素。

JavaScript中 this 关键字JavaScript中 this 关键字点击后:JavaScript中 this 关键字

JavaScript中 this 关键字 JavaScript中 this 关键字点击后:JavaScript中 this 关键字

 

异步时的情况

JavaScript中 this 关键字JavaScript中 this 关键字

箭头函数体中的 this 对象,是定义函数时的对象,而不是使用函数时的对象。

JavaScript中 this 关键字JavaScript中 this 关键字

 

参考:https://www.cnblogs.com/pssp/p/5216085.html