前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >(六)类组件中 方法的 this

(六)类组件中 方法的 this

作者头像
老怪兽
发布2023-02-22 14:35:32
8290
发布2023-02-22 14:35:32
举报

# 🍧一、类组件中 方法的 this

代码语言:javascript
复制
// 1. 创建一个类组件
class Mood extends React.Component {
    constructor(props) {
        super(props)
        // 初始化状态
        this.state = {
            isMood: true
        }
    }

    render() {
        // 结构赋值 读取状态
        const { isMood } = this.state
        return <h1 onCLick={demo}>今天心情很{isMood ? '开心' : '伤心'}</h1>
    }
}

// 2. 渲染组件到页面
ReactDom.render(<Mood/>, document.getElmentById('test'))

function demo() {
    const { isMood } = this.state
    console.log(isMood)
}
  • 为什么此处的 thisundefiend 因为这个是一个普通函数,babel 在进行翻译的时候,开启了严格模式,禁止自定义函数 this 指向 window

# 🦝二、如何获取到类组件的实例对象

  1. 因为这是一个类组件,所以当我们把类一折叠,应该把所有的东西都带走,所以把 demoe 函数放到类里面去
代码语言:javascript
复制
// 1. 创建一个类组件
class Mood extends React.Component {
    constructor(props) {
        super(props)
        // 初始化状态
        this.state = {
            isMood: true
        }
    }

    render() {
        // 结构赋值 读取状态
        const { isMood } = this.state
        return <h1 onCLick={demo}>今天心情很{isMood ? '开心' : '伤心'}</h1>
    }

    demo() {
        // demo 是放在哪里的? ---- 放在 Mood 的原型对象上
        console.log(this.state.isMood)
    }
}

// 2. 渲染组件到页面
ReactDom.render(<Mood/>, document.getElmentById('test'))
  1. demo 函数是放在哪里的? ---- 放在 Mood 的原型对象上,供实例使用
  2. 通过 Mood 的实例调用 dome 函数时,dome 中的 this 就是 Mood 实例
# 🐱为什么会说 demo 函数没有定义呢?
  1. 因为在下面这段代码中不能调用到 demo 这个函数,demo 这个函数是供实例使用的,所以在使用的时候需要 this.demo 去调用这个函数
代码语言:javascript
复制
render() {
    // 结构赋值 读取状态
    const { isMood } = this.state
    return <h1 onCLick={demo}>今天心情很{isMood ? '开心' : '伤心'}</h1>
}

demo() {
    // demo 是放在哪里的? ---- 放在 Mood 的原型对象上
    console.log(this.state.isMood)
}
# 🐶为什么还是不能读取 stateundefiend 身上呢?

为什么此处的 thisundefiend,参考地址

  1. 看一下 demo 函数中的 this 到底是什么
代码语言:javascript
复制
demo() {
    // demo 是放在哪里的? ---- 放在 Mood 的原型对象上
    // 由于 demo 函数是作为 onClick 的回调,所以不是通过实例调用的,是直接调用,又应为严格模式限制,不允许自定义函数 this 指向 window 所以此处的 this 是 undefiend
    console.log(this)   // undefiend
}
  • 由于 demo 函数是作为 onClick 的回调,所以不是通过实例调用的,是直接调用,又应为严格模式限制,不允许自定义函数 this 指向 window 所以此处的 this 是 undefiend console.log(this) // undefiend
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022年12月31日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # 🍧一、类组件中 方法的 this
  • # 🦝二、如何获取到类组件的实例对象
    • # 🐱为什么会说 demo 函数没有定义呢?
      • # 🐶为什么还是不能读取 state 在 undefiend 身上呢?
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档