微信小程序报错解决方法TypeError: Cannot read property ‘setData‘ of undefined
Posted 喵喵喵喵要抱抱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信小程序报错解决方法TypeError: Cannot read property ‘setData‘ of undefined相关的知识,希望对你有一定的参考价值。
场景
自己在调用 wx.getSystemInfo({})
时,开发工具自动补全了代码。在 success
回调中按照以往的写法调用 this.setData({ });
时,报错:TypeError: Cannot read property 'setData' of undefined
。
相关代码如下:
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
wx.getSystemInfo({
success: function (res) {
console.log(res);
this.setData({
system_info: res.brand,
});
},
fail: function (res) {
this.myShowError("获取手机系统信息")
},
complete: function (res) { },
})
},
仔细对比和之前绑定事件调用 this.setData({ });
,调用方式并没有什么差别。查阅资料发现要改成 success: (res) => {};
这种写法,而不是 success: function (res) {};
,就可以正常使用了。
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
wx.getSystemInfo({
success: (res) => {
console.log(res);
this.setData({
system_info: res.brand,
});
},
fail: function (res) {
this.myShowError("获取手机系统信息")
},
complete: function (res) { },
})
},
解决方法
将下列代码:
success: function (res) {
this.setData({})
}
改成以下代码:
success: (res) => {
this.setData({})
}
原因分析
原因:两种写法 this
指向不同;
将下列两种情况分别运行一遍:
success: (res) => {
console.log("(res) => { }时:" + this);
},
success: function (res){
console.log("function (res)时:" + this);
},
运行结果对比分析:
function (res)时:undefined
(res) => { }时:[object Object]
function (res)
写法时 ,this
是 undefined
未定义的。
(res) => { }
写法时 this
是 Object
。
分析总结
- 如果函数作为对象的方法调用,
this
指向的是这个上级对象,即调用方法的对象。 - 如果是构造函数中的
this
,则this
指向新创建的对象本身。
以上是关于微信小程序报错解决方法TypeError: Cannot read property ‘setData‘ of undefined的主要内容,如果未能解决你的问题,请参考以下文章
急!急!微信小程序报错:TypeError: fetch is not a function
(uniapp和)微信小程序页面跳转首页报错:navigateTo:fail can not navigateTo a tabbar page
微信小程序解密 TypeError(the JSON object must be str, not ‘bytes')