uniapp中this有时打印的是undefined(作用域问题)

this关键字是指当前组件的实例,使用this可以直接访问当前组件中的属性和方法。
比如,在组件的methods中,通过this可以访问组件的data对象,如下所示:

javascript 复制代码
export default {
    data() {
        return {
            message: 'Hello World'
        }
    },
    methods: {
        showMessage() {
            console.log(this.message);
        }
    }
}

that是一个临时对象,用于在函数内部保存this的值。

在一些情况下,函数内部的this并不是指向当前组件的实例,此时可以使用that来保存this的值,以便在函数内部继续使用。
比如,在使用uni.request向服务器发起请求时,由于this的指向已经改变,此时需要使用that来保存当前组件的实例,示例如下:

javascript 复制代码
export default {
    data() {
        return {
            items: []
        }
    },
    methods: {
        loadData() {
            //第一种解决方案,that 保存当前组件的实例          
            let that = this;
            uni.request({
                url: '*******',
//该success方法指向闭包,所以this属于闭包,由此在success回调函数里是不能直接使用this.items的
                success(res) {
                    //在此处使用that来访问items属性,而不是this
                    that.items = res.data;
                }

            })
        },
        loadData() {
            //第二种解决方案,使用箭头函数      
            uni.request({
                url: '*******',
//箭头函数会默认帮我们绑定外层 this 的值,所以在箭头函数中 this 的值和外层的 this 是一样的
                success:(res)=>{
                    this.items = res.data;
                }

            })
        }
    }
}
相关推荐
00后整顿职场20 小时前
Hbuilderx APP真机无法识别iqoo Z9+手机设备解决方案
uni-app·uniapp真机调试·真机运行
前端小雪的博客.1 天前
【保姆级教程】uniAI 插件高效开发 uni-app 微信小程序(附实战案例)
微信小程序·uni-app·ai编程·uniai
T^T尚1 天前
一个完整的项目怎么打包成为一个app
前端·uni-app
阿巴资源站1 天前
uniapp加水印
java·前端·uni-app
特立独行的猫a1 天前
uni-app x跨平台开发实战:开发鸿蒙HarmonyOS滚动卡片组件,scroll-view无法滚动踩坑全记录
华为·uni-app·harmonyos·uniapp-x
郑州光合科技余经理1 天前
从零到一:构建UberEats式海外版外卖系统
java·开发语言·前端·javascript·架构·uni-app·php
iOS阿玮2 天前
百款出海社交 App 一夜下架!2026,匿名社交的生死劫怎么破?
uni-app·app·apple
肖老师xy2 天前
uniPush2.0对接
uni-app
浮桥2 天前
uniapp + h5实现悬浮活动按钮组件
前端·javascript·uni-app
笨笨狗吞噬者2 天前
【uniapp】小程序端解决分包的uni_modules打包后产物进入主包中的问题
前端·微信小程序·uni-app