什么是this指向呢?
当我们创建函数的时候,会自动返回this,这个this可以获取函数中的对象(首先要知道this不是定义的时候确定,而是调用的时候才确定,这就导致了它的复杂多变)
let counter = {
count: 0,
a() {
return this.count
},
b() {
console.log(this)
}
}
counter.b()
当我们执行这个函数,结果是{count: 0, a: ƒ, b: ƒ},this代表的是整个counter。当调用a函数时结果是0,this是不一样的。
this的指向是有一套规则的
以函数的形式调用时,this指向的是Windows
以方法的形式调用时,this指向的是调用方法的对象
以构造函数的形式调用时,this指向的是新创建的那个对象
使用call和apply调用时,this是指定的那个对象
箭头函数的 this 看外层是否有函数 如果有,外层函数的 this 就是内部箭头函数的 this 如果没有,就是 window
通常意义上 this 指针指向为最后调用它的对象。这里需要注意的一点就是 如果返回值是一个对象,那么 this 指向的就是那个返回的对象,如果返回值不是一个对象那么 this 还是指向函数的实例
现在我们知道了,不同情况下this的指向,那我们可以改变this的指向吗?当然可以下面介绍四种改变this的方法
1.定义that,保存外部的this,在内部使用that,这个that就是外部的this。
2.箭头函数,把函数定义成箭头函数,这个函数的this就和外部一致了。
3.call和apply(参数传递形式不一样)第一个传的是单个的值,第二个传的是一个数组。
4.bind(返回新函数,不会调用函数本身)