谁调用它,this就指向谁。 这是目前判断this指向用的最多的方法,但是仅通过这句话,只能判断最简单的一些this指向,在很多情况下并不能准确的判断this的指向,因此可以用四种规则来判断this的指向。
ps: this指向在严格模式下以及非严格模式下 是不一样的,因此在说this指向时 还要区分是否是严格模式。
this绑定规则一共分为四种:默认绑定,隐式绑定,显示绑定,new绑定。并且四种绑定规则的优先级顺序是 new绑定 > 显示绑定 > 隐式绑定 > 默认绑定。
接下来我们先看一下四种绑定的样子是什么样的:
- new绑定
![](https://i-blog.csdnimg.cn/blog_migrate/51f4bc09fbb018826fb31e62e8fb9f81.png)
ps: 构造函数返回的如果是function 或者 object this指向的就是返回的对象
2.显示绑定
![](https://i-blog.csdnimg.cn/blog_migrate/d537d404352a26d6dc7e57acd67bef86.png)
new apply bind 是显示绑定的三中方法 this指向的就是绑定的对象
3.隐式绑定
![](https://i-blog.csdnimg.cn/blog_migrate/41a11533e1dc88d6ac23566c758ec091.png)
隐式绑定的调用是发生在某个对象上的,一般为xxx.fn( )
4.默认绑定
![](https://i-blog.csdnimg.cn/blog_migrate/c028037723df282fcb7febcfa126fcb5.png)
介绍完了四种绑定规则,那么就教大家一个判断的顺序以及方法
1.函数是不是在new中被调用 如果是 那么指向新创建的对象
2.函数是不是通过call,apply,bind调用,如果是,那么指向绑定的对象
3.函数是不是被某个对象调用,如果是,那么指向这个对象
4.如果以上都没有,那么就是使用的默认绑定,在非严格模式下,this指向全局
ps: 介绍两种特殊情况
1.我们在写call apply 以及bind的时候 第一个参数其实是可以传null的 当传null的时候 this遵循默认绑定的规则
2.箭头函数是没有自己的this的 箭头函数里的this是继承的上一级代码里的this。