React类中方法的this指向

对于普通的类:

class Person {
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }
    speak() {
        console.log(this);
    }
}

const p1 = new Person(’tom’, 18);
p1.speak(); // 通过实例调用speak方法

const speak = p1.speak;
speak(); // undefined,为什么不是window?——因为类中定义的方法,已经局部开启了strict

所以对于react组件:

// 这样的this就会报错
// 不是通过Weather实例调用了,是直接调用,且类中开启严格模式,this为undefined
class Weather extends React.Component {
    constructor(props) {
        super(props);
        this.state = {isHot: false};
    }
    render() {
        const {isHot} = this.state;
        return <h1 onClick={this.changeWeather}>XXX</h1>
    }
    changeWeather() {
        // changeWeather放在哪里?——放在Weather的原型对象,供实例使用
        console.log(this);
    }
}

即让changeWeather里面获取到Weather的实例对象:

// 构造器中的this就是Weather的实例对象
constructor(props) {
    super(props);
    this.state = {isHot: false};
    // =左边的即自定义的一个同名函数,放到实例上;然后把右边的新函数赋值给左边(右边的changeWeather方法是原型上的方法)
    this.changeWeather = this.changeWeather.bind(this); // 这个函数的this已                              经指向了Weather实例对象
}

即:

class Weather extends React.Component {
    constructor(props) {
        super(props);
        this.state = {isHot: false};
        // 顺着原型链找到了原型对象上的changeWeather方法,调用.bind生成一个新的函数,并把函数中的this改为了Weather的实例对象,把新的函数挂载到了实例自身的demo函数上
        this.demo = this.changeWeather.bind(this);
    }
    render() {
        cosnt {isHot} = this.state;
        return <h1 onClick={this.demo}>XXX</h1>
    }
    changeWeather() {
        // changeWeather放在哪里?——放在Weather的原型对象,供实例使用
        console.log(this);
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值