关于this的指向,确实是一个使人头疼的问题,那么this到底指向谁呢?数组
归根到底一句话:谁调用了包含this的方法,那么this就指向谁bash
关于这点,咳咳咳...有以下三个观点:app
1.this指向的,永远只多是对象!函数
2.this指向谁,永远不取决于this写在哪!而是取决于函数在哪调用。ui
3.this指向的对象,咱们称之为函数的上下文context,也叫函数的调用者。this
以下:spa
function Test(){ } Test() 复制代码
此时,this就指向windowcode
以下:对象
let Test = { name:"Fan", say:function(){ console.log(this.name) } } Test.say() //Fan 复制代码
此时,this就指向Test作用域
不过,匿名函数(好比:定时器)具备全局性,所以this对象一般也指向window
以下:
function Test(){ console.log(this); } let arr = [Test,1,2]; arr[0](); 复制代码
此时,this就指向arr
以下:
function Test(){ console.log(this); } setTimeout(Test,1000); // setInterval(Test,1000); 复制代码
此时,this就指向window
以下:
function Test(){ console.log(this); } let obj = new Test(); 复制代码
此时,this就指向obj
若是使用 call、apply、bind绑定对象,那么this就指向那个绑定的对象
箭头函数
箭头函数比较特殊,由于箭头函数内部没有this,this指向外层最近的调用者,简单的说,就是须要向上找一级
- 箭头函数在调用时,不会生成自身做用域下的this和arguments
- 不像普通函数同样在调用时自动获取this,而是沿着做用域链向上查找,找到最近的外部一层做用域的this,并获取
- 在定义对象的方法/具备动态上下文的回调函数/构造函数中都不适用