首页 > 编程语言 >小程序的var that = this

小程序的var that = this

时间:2022-10-20 22:35:06浏览次数:36  
标签:request 程序 var setData data Page wx

小程序的var that = this

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

this作用域分析:
1.在Page({})里面,this关键字指代Page({})整个对象
2.因此可以通过this关键字访问或者重新设置Page({})里data的变量
3.然而在使用了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的变量。

错误代码:
handleReadBook(e) {
BMYAPI.api_updateReadsBooks({}, function(err, res) {
if (err) return;
this.setData({ data: res.data.data });
});
},

运行上面代码,发现this.setData无效,视图并没有按照我想要的样子将data重新赋值渲染。这是因为在上述代码中,function(err, res){}是一个闭包,不能直接用this来setData。

正确代码:
handleReadBook(e) {
const/var that = this;
BMYAPI.api_updateReadsBooks({}, function(err, res) {
if (err) return;
that.setData({ data: res.data.data });
});
},
上述代码中,将this赋值给that,用that来setData。

标签:request,程序,var,setData,data,Page,wx
From: https://www.cnblogs.com/chaishengblog/p/16811578.html

相关文章