vue:this和that的理解

  • 当我们进入公司的时候会发现一个很常见的情况,就是你的前开发者会常用这么一个变量:that、self…

  • 为什么会用到that、self呢,小编是这么理解的,this指向的是当前的对象,而that、self临时的变量,为了临时存储一下this的保证不管我们怎么调用,都能使用到this,而且对于vue来说,能保证这个this的值不变,一直都是vue实例
  • 接下来小编用个案例简单展示一下结果:
mounted () {
    this.this_that()
},
methods: {
    this_that () {
        const that = this
        console.log('this1', this)
        setTimeout(function () {
            console.log('this2', this)
            console.log('that3', that)
        }, 1000)
        setTimeout(() => {
            console.log('this4', this)
            console.log('that5', that)
        }, 1500)
    },
}
  • 输出结果:

  • 解析:

this1 -- this1很容易理解,肯定就是指向的vue实例了

this2 -- this2输出的是window对象,为什么呢,首先我们是用function(){}普通函数的形式,计时器是window函数调用的,所以指向的就是window

that3 -- that3为什么输出的是vm实例了呢,是因为我们在定时器外面定义了一个that变量,在定时器里面输出的只是一个变量的值,而不是this的指向

this4 -- 为什么这里跟this2不一样了呢,注意我们这里定时器使用的是箭头函数,箭头函数的this指向的是上一级调用它的对象,所以啊,这里this指向的是vue实例

that5 -- 跟that3一样

这下应该知道原因了吧:我们提前使用that存储了this,那么在这个逻辑里面,不管我们怎么调用,最终我们都能使用到vue实例的this,就不用考虑this的指向问题了,方便了我们对this的使用。

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,当我们在Vue 2中使用`that`时,通常是在组件内部的某些方法中使用。`that`是一个常见的命名约定,用于引用组件实例。在Vue组件中,我们可以通过`this`关键字来访问组件实例,但在某些情况下,由于作用域的限制,我们可能需要将`this`赋值给`that`变量,以便在嵌套函数或回调函数中访问组件实例。 例如,在一个Vue组件的方法中,我们可以使用`that`来引用组件实例,如下所示: ``` export default { data() { return { message: 'Hello Vue!' } }, methods: { showMessage() { const that = this; setTimeout(function() { console.log(that.message); }, 1000); } } } ``` 在上面的例子中,我们在`showMessage`方法中创建了一个定时器,并在定时器的回调函数中使用`that`来引用组件实例。这是因为在回调函数中,`this`的作用域已经改变,不再指向组件实例,所以我们需要使用`that`来访问组件实例的数据。 总结起来,当我们在Vue 2中使用`that`时,通常是为了在组件内部的某些方法中访问组件实例。 #### 引用[.reference_title] - *1* *2* [Vue学习笔记(一)—— 什么时候需要import Vue from 'vue'](https://blog.csdn.net/weixin_43503511/article/details/103547574)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [vue2转vue3方案](https://blog.csdn.net/YoungtiNine/article/details/124495867)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值