this指向一直对我来说是比较头疼的问题,时不时会在这个上面踩坑,每次都要查各种资料然后才找到问题,每次找又比较麻烦,所以今天我打算自己整理一下 关于this指向 的问题。
首先,普通函数,this的概念是:this是JavaScript的一个关键字,他是指函数执行过程中,自动生成的一个内部对象,是指当前的对象,只在当前函数内部使用。(this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this指向的是window;当函数被作为某个对象的方法调用时,this就等于那个对象)
this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象。
1. 普通函数的调用
在非严格模式下的函数作用域 中,this 指向的是全局对window
2. 在构造函数中 this 的调用
此时 this 指向 实例对象
3. 对象方法的调用
此时 this 指向 该方法所属的对象
4. 通过事件绑定的方法
此时 this 指向 绑定事件的对象
5. 定时器函数
this 指向 window
6. 箭头函数的 this
箭头函数的this定义:箭头函数的this是在定义函数时绑定的**
(所谓的定义时候绑定,就是this是继承自父执行上下文中的this,不是在执行过程中绑定的。)
简单的说,函数在定义时,this就继承了定义函数的对象。**
箭头函数中,this指向的固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this。正是因为它没有this,所以也就不能用作构造函数。