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;
                }

            })
        }
    }
}
相关推荐
2501_9159184113 小时前
详解iOS App上架至App Store的全流程步骤与注意事项
android·macos·ios·小程序·uni-app·cocoa·iphone
anyup13 小时前
终于在今天入选了 Gitee GVP,这真值得庆祝~
前端·uni-app·开源
虚惊一场19 小时前
撤销为什么只需要 pop:用事件重放实现离线台球计分
微信小程序·uni-app
虚惊一场19 小时前
从一个小程序到一座工具箱:uni-app 分包与 Flask 微服务实践
微信小程序·uni-app
Cry丶21 小时前
【已解决】adb devices 能识别手机,但 HBuilderX 搜索不到设备的避坑指南
android·adb·uni-app·hbuilderx·真机调试
清风programmer2 天前
H5与小程序通信
前端·vue.js·uni-app
2501_915918413 天前
深入对比iOS开发中常用性能监控工具的底层原理与优缺点分析
android·ios·小程序·https·uni-app·iphone·webview
AI多Agent协作实战派4 天前
AI多Agent协作系统实战(二十三):Agent读HEARTBEAT.md不读AGENTS.md——openclaw的文件加载之谜
前端·数据库·人工智能·uni-app
tg-zm8899964 天前
uni-app开发经验分享-跨端开发经验总结
uni-app
m0_547486664 天前
《Vue.js + uni-app全栈开发从入门到实践 》全套PPT课件2026版
vue.js·uni-app