typescript 属性默认值使用箭头函数 this指向问题

今天注意到前端小伙伴用react 定义component class的方法的时候是通过箭头函数的方式,表示好奇。

class Test extends React.Component {
  public fun1 = () => {
    console.log(this);
  };

  fun2() {
    console.log(this);
  }
}

 如上代码中fun1的定义方式。于是感到好奇,fun1中的this是什么。

   如果我们套用箭头函数的概念,我们可能认为,这中间的this是否会指向环境变量global或window。然而却不是这样的,而是指向new Test()实例。

   我们可以看以下的等价写法:

class Test extends React.Component {
  constructor() {
    super();
    this.fun1 = () => {
      console.log(this);
    };
  }

  fun2() {
    console.log(this);
  }
}

也就是在属性默认值中定义的箭头函数,等价于构造函数中的定义,所有this指向的是实例。

 

那么为何要用定义箭头函数属性的方式来定义方法呢?

它和fun2的方式的this指向的不是都是实例吗?

const obj = new Test();
obj.fun1();// 指向obj
obj.fun2();// 指向obj

//差异
const fun1=obj.fun1;
const fun2=obj.fun2;

fun1();// 指向obj
fun2();// global

如上代码,我们如果直接用实例来调用,则没什么差异。

但是,当我们先赋值给变量,由于fun2是绑定调用者的,所以这里为全局变量。

 

所以直接定义箭头函数属性的效果在于它直接绑定了实例,可以直接使用,这个对应react的jsx中使用是比较方便的,不然使用fun2模式,就需要手动绑定this再使用。

   

转载于:https://www.cnblogs.com/chianquan/p/10257723.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值