this指向详情参考:https://blog.csdn.net/weixin_37722222/article/details/81625826
apply和call详情参考:https://www.jianshu.com/p/bc541afad6ee
1.基本函数的指向
在非严格模式下指向window,在严格模式下无所指向。
2.对象字面量函数指向
就是那个函数调用,this指向哪里
3.构造函数指向
指向使用new构造方法构造出来的函数
4.箭头函数对this指向的改变
箭头函数没有 this ,箭头函数里面的 this 是继承外面的环境。
![](https://img.haomeiwen.com/i17296871/33a38719a7f5556c.png)
![](https://img.haomeiwen.com/i17296871/0215abc260b65a01.png)
注意在事件中使用箭头函数结果不是我们想要的,事件函数可以理解为为对象onclick设置值,所以函数声明时this为当前对象,但使用箭头函数时this为声明函数上下文。使用handleEvent绑定事件处理器时,this指向当前对象而不是DOM元素。
![](https://img.haomeiwen.com/i17296871/4cc1e4aed4c8c8ae.png)
5.apply与call的使用
call 和 apply 的作用,完全一样,唯一的区别就是在参数上面。
call 接收的参数不固定,第一个参数是函数体内 this 的指向,第二个参数以下是依次传入的参数。
apply接收两个参数,第一个参数也是函数体内 this 的指向。第二个参数是一个集合对象(数组或者类数组)
![](https://img.haomeiwen.com/i17296871/38ccc0eb6127fc09.png)
可以看到,obj 是作为函数上下文的对象,函数 getName 中 this 指向了 obj 这个对象。参数 firstName 和 lastName 是放在数组中传入 getName 函数。
call和apply可用来借用别的对象的方法,这里以call()为例:
![](https://img.haomeiwen.com/i17296871/ed9722caf9da1063.png)
call和apply可用来借用别的对象的方法,这里以call()为例:
![](https://img.haomeiwen.com/i17296871/04f7ee7089534bea.png)
网友评论