A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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。
上述内容属于转载的,看这篇文章对于我这人对这块理解比较透彻。
---------------------本文来自 weixin_42554311 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/weixin_425 ... 733?utm_source=copy

1 个回复

倒序浏览
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马