在方法中使用箭头函数this指向问题

本文探讨了在JavaScript中,箭头函数在方法内的this指向问题。通过两个题目展示,说明作为方法的箭头函数其this会指向全局window对象,而非预期的对象实例。并引用阮一峰的解释,强调在方法中使用箭头函数可能导致的不寻常行为。
摘要由CSDN通过智能技术生成

首先来一道题目

var go =console;
var langue ={
  name: '',
  php(){
    var t = this;
    go.info(t.name);
  },
  python: () =>{
    let t = this;
    go.info(t.name);
  }
};
langue.php(); 	//输出空
langue.python();//输出空

第一个输出其实是langue.name;很好理解这种函数声明,this指向langue

第二个输出其实是Window.name;


我们经常能看到箭头函数this的举例是在setTimeout等回调函数中展示,内部的this就是定义时上层作用域中的this。

而如果在方法中使用箭头函数呢?

再来一道题

 var x = 11;
    var obj = {
      x: 22,
      methods: {
        x: 33,
        say: function () { console.log(this.x) },
        say2: () => { console.log(this.x) }
      }
    }
 
    obj.methods.say();	//33
    obj.methods.say2();	//11

显而易见,在方法中使用箭头函数时,就不是简单的指向“外面”的this,是一种例外的情况

总结

  • 作为方法的箭头函数this指向全局window对象

解释

根据阮一峰的解释,在方法中使用箭头函数是不合适的,这是因为对象不构成单独的作用域,导致方法中的箭头函数定义时的作用域就是全局作用域。

阮一峰箭头函数原文链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值