千家信息网

微信小程序中报错this.setData怎么解决

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,本篇内容主要讲解"微信小程序中报错this.setData怎么解决",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"微信小程序中报错this.setData怎
千家信息网最后更新 2025年01月19日微信小程序中报错this.setData怎么解决

本篇内容主要讲解"微信小程序中报错this.setData怎么解决",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"微信小程序中报错this.setData怎么解决"吧!

先说原因:

function声明的函数和箭头函数的作用域不同,这是一个不小心坑的地方。

所以对于这个结果,还是换回es5的function函数去写最好了。

箭头函数和function的区别:

  • 箭头函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象

  • 箭头函数不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误

  • 箭头函数不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用Rest参数代替,不可以使用yield命令,因此箭头函数不能用作Generator函数。

这么写会报错

thirdScriptErrorthis.setData is not a function;at pages/index/index onLoad function;at api getSystemInfo success callback functionTypeError: this.setData is not a function
onLoad: function () {  wx.getSystemInfo({   success: function (res) {    this.setData({     lang: res.language    })    console.log(res.language)   }  })

这么改一下就不报错了。

onLoad: function() {  wx.getSystemInfo({    success: (res) = >{      this.setData({箭头函数的this始终指向函数定义时的this lang: res.language      }) console.log(res.language)    }  })

或者这样:

onLoad: function () {  var that=this;  wx.getSystemInfo({   success: function (res) {    that.setData({     lang: res.language    })    console.log(res.language)   }  })

可以用如下示例说明:

'use strict';var obj = { i: 10, b: () => console.log(this.i, this), c: function() {  console.log(this.i, this); }}obj.b(); // prints undefined, Window {...} (or the global object)obj.c(); // prints 10, Object {...}

到此,相信大家对"微信小程序中报错this.setData怎么解决"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0