为了账号安全,请及时绑定邮箱和手机立即绑定

ES6对函数的拓展 — 箭头函数的this使用(2018-05-11)

标签:
JavaScript
  箭头函数中的this指向的是定义时的this,而不是执行时的this。

举个栗子

 //定义一个对象
    var obj = {        x:100, //属性x
        show(){        //延迟500毫秒,输出x的值
            setTimeout(               //匿名函数
               function(){console.log(this.x);},               500
           );
        }
    };
    obj.show();//打印结果:undefined

  上面对象中的方法(ES6对象的扩展),x的值确实是100,问题出在了this上,当代码执行到了setTimeout( )的时候,此时的this已经变成了window对象(setTimeout( )是window对象的方法),已经不再是obj对象了,ES5中可以用var that = this的方式避免。

箭头函数闪亮登场

//定义一个对象
    var obj = {        x:100,//属性x
        show(){            //延迟500毫秒,输出x的值
            setTimeout(               //不同处:箭头函数
               () => { console.log(this.x)},               500
            );
        }
    };
    obj.show();//打印结果:100

  唯一的不用就是setTimeout中,原本的匿名函数用箭头函数代替了箭头函数中的this指向的是定义时的this,而不是执行时的this当定义obj的show( )方法的时候,我们在箭头函数编写this.x,此时的this是指的obj,所以this.x指的是obj.x。而在show()被调用的时候,this依然指向的是被定义时候所指向的对象,也就是obj对象,故打印出:100。



作者:a小磊_
链接:https://www.jianshu.com/p/be8f5ce4799b


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消