1.this的指向问题
this关键字只与函数的执行环境有关,而与声明环境没有关系
1.对象的方法this指向调用方法的对象
2.普通函数this指向全局对象
3.匿名函数,定时器中的this指向全局对象
4.构造函数this指向new的实例对象
5.call,apply,bind方法参数重定向this指向
1.对象的方法
let obj={
show(){
console.log(this);
}
}
obj.show() //输出 {show: ƒ}
因为obj调用了show方法,this指向方法调用者obj对象,
2.普通函数
function normal(){
console.log(this); //输出 window对象
}
//相当于
window.normal()
normal()
3.构造函数
class Person{
show(){
function show2(){
console.log("show2",this);
}
console.log("show1",this);
show2()
}
}
let person = new Person()
person.show()//输出 show1 person对象 show2 undefined
person对象调用了方法,所以this指向方法调用者person对象,
show2是show方法里的一个普通函数,类里的方法默认开启严格模式
在严格模式下,全局对象会变更为undefined
4.call,apply,bind方法
第一个参数都是 this 的指向对象
call其他所有参数以,隔开
apply其他参数以数组形式传入
bind 返回值是函数,参数和 call 一样。