微信小程序開發中varthat=this的用法

NO IMAGE

在微信小程序開發中,var that =this的聲明很常見。舉個例子,代碼如下!

示例代碼1

 1    //index.js
2   Page({
3
4     data: {
5       toastHidden: true,
6      },
7
8      loadData: function () {
9        var that = this //這裡聲明瞭that;將this存在that裡面
10        wx.request({
11         url: 'test.php',
12         data: {a: 'a', b: 'b'},
13         header: {
14           'content-type': 'application/json' 
15         },
16         success(res) {
17            that.setData({ toastHidden: false }) //這裡使用了that,這樣就可以獲取Page({})對象
18        },
19      })
20    }
21
22 })

在代碼中第9行聲明瞭var that =this;第17行使用了that。

微信小程序開發中varthat=this的用法

如果不聲明var that =this,且that改成this,代碼如下!

示例代碼2

 1    //index.js
2    Page({
3
4      data: {
5       toastHidden: true,
6      },
7
8      loadData: function () {
9        wx.request({
10          url: 'test.php',
11          data: {a: 'a', b: 'b'},
12          header: {
13           'content-type': 'application/json' 
14          },
15         success(res) {
16            this.setData({ toastHidden: false })
17         },
18       })
19    }
20
21  })

此時運行代碼就會報以下錯誤!

微信小程序開發中varthat=this的用法

從報錯中得知setData這個屬性讀不到,為何讀不到?這跟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的變量

最後

覺得文章不錯的話,給我個關注哇,點個讚唄!

如果對文章有疑問或想技術交流,可關注公眾號【GitWeb】與我一起探索學習!

微信小程序開發中varthat=this的用法

相關文章

微信小程序wx.request請求數據報錯:不在以下request合法域名列表中

微信小程序toast組件中bindchange事件觸發條件

PHP從二維數組獲取指定數據,組成新維二數組

使用FileZillaServer快速搭建本地FTP服務器