this的指向问题,this绑定定义的对象
箭头函数的this绑定看的是this所在的函数定义在哪个对象下,绑定到哪个对象则this就指向哪个对象
如果有对象嵌套的情况,则this绑定到最近的一层对象上
//定义一个对象
var obj = {
x:100,
//属性x
show(){
//延迟500毫秒,输出x的值
setTimeout( //匿名函数 function(){console.log(this.x);}, 500 );
}
};
obj.show();//打印结果:undefined
为什么结果打印是undefined呢,问题出在了this上,当代码执行到了setTimeout( )的时候,此时的this已经变成了window对象(setTimeout( )是window对象的方法),已经不再是obj对象了,所以我们用this.x获取的时候,获取的不是obj.x的值,而是window.x的值,再加上window上没有定义属性x,所以得到的结果就是:undefined。
如果使用箭头函数来编写同样的一段代码,得到的this.x又是另一番景象。我们来试试看:
//定义一个对象
var obj = {
x:100,//属性x
show(){
//延迟500毫秒,输出x的值
setTimeout(
//不同处:箭头函数
() => { console.log(this.x)},
500
);
}
};
obj.show();//打印结果:100
当定义obj的show( )方法的时候,我们在箭头函数编写this.x,此时的this是指的obj,所以this.x指的是obj.x。而在show()被调用的时候,this依然指向的是被定义时候所指向的对象,也就是obj对象,故打印出:100。
上述内容属于转载的,看这篇文章对于我这人对这块理解比较透彻。