微信小程序的this和that的用法

微信小程序的this和that的用法,第1张

在微信小程序中,我们经常会使用this.setData来修改数据,但有时候发现,this拿不到,到底是为什么呢?

当我们通过wx.request请求网络数据成功后绑定数据时候报以下错误

这是睁孝因为this作用域指向问题 ,success函改掘数实际是一个闭包 , 无法直接通过this来核早核setData

方法一:保留this的副本that

方法二:回调函数使用函数声明(箭头函数)的写法

从上面情景中我们发现,问题主要出现在调用接口的回调函数中,所以我们在success或者fail回调函数中要setData的时候,就要选择其中一种方式来避免this丢失

解决办法 为复制一份this的指向到变量中,这样在函数执行过程中虽然this改变了,但是that还是指向之前的对象

大家知道this是指当前对象,只是一个指针,真正的对象存放在堆内存中,this的指向在程序执行过程中会变化,因此如果需要在函数中使用全局数据需要合适地将this复制到变量中。

this作用域分析:

1.在Page({})里面,this关键字指代Page({})整个对象

2.因此可以通过this关键字访问或者重新设置Page({})里data的变量

3.然而在loadData函数中使用了wx.request({})API这个册桥方法导致在wx.request({})里没办法使用this来获取Page({})对象伏姿弯

4.虽然在wx.request({})里没法使用this获取Page({})对象,但是可以在wx.request({})外面先把this存在某个变量中,所以就有了 var that =this 这个声明。此时that指代Page({})整个对象缺闷,这样子就可以在wx.request({})里使用that访问或者重新设置Page({})里data的变量


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12336555.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存