class类的this指向

本文探讨了JavaScript类方法中this的指向问题,当类方法被赋值给变量再调用时,this会指向window导致为undefined。解决方法是使用bind()函数来绑定this到实例对象,确保在调用时this正确指向。示例代码中展示了如何通过bind()修复这个问题。
摘要由CSDN通过智能技术生成

一般情况下类中的this指向实例,类中方法实例调用的话,类方法中this就指向实例对象。

但是把类中的方法,赋值给变量之后再调用就相当于自调用了,就不是实例调用了。赋值方法this就是指向window,但是类中的方法是自动开启局部严格模式了,所以赋值方法this最终是undefined

例如下面代码中 类方法ready,赋值给变量x,再x()调用,就是自调用,this就是undefined

解决:要想让x()调用时this指向实例对象,只需在赋值是改变this指向就行。例如bind()

类方法(也就是p1实例原型对象)的方法 ready通过bind返回一个并且this是指向p1的新函数,赋值给x

 x()调用自然this就是指向p1了

class Preson{
        constructor(name,age){
          this.name = name
          this.age = age
          console.log(this); // Preson {name: 'zhansan', age: 18}
        }
        speak(){
          console.log(this); // Preson {name: 'zhansan', age: 18}
        }
        ready(){
          console.log(this,'方法赋值给变量,相当于是自调用');
        }
      }
      const p1 = new Preson('zhansan',18)
      p1.speak()
      const x = p1.ready
      // const x = p1.ready.bind(p1) // 通过bind改变this指向实例就行  // Preson {name: 'zhansan', age: 18} 
      // 类方法(也就是p1实例原型对象)的方法 ready通过bind返回一个并且this是指向p1的新函数,赋值给x
      // x()调用自然this就是指向p1了
      console.log(x); // ƒ ready(){console.log(this,'方法赋值给变量,相当于是自调用');}
      x() // undefined  
      /* 
         const x = p1.ready  是把类方法ready赋值给 x ,此时x就是类ready方法
         x()  此步骤就是函数自调用,应该指向window,但是类的方法是局部自动开启严格模式,所以this是undefined
      
      */

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值