在微信小程序開(kāi)發(fā)中,var that =this的聲明很常見(jiàn)抹缕。舉個(gè)例子荸哟,代碼如下假哎!
示例代碼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({})對(duì)象
18 },
19 })
20 }
21
22 })
在代碼中第9行聲明了var that =this舵抹;第17行使用了that。
image
如果不聲明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 })
此時(shí)運(yùn)行代碼就會(huì)報(bào)以下錯(cuò)誤刑枝!
image
從報(bào)錯(cuò)中得知setData這個(gè)屬性讀不到香嗓,為何讀不到?這跟this關(guān)鍵字的作用域有關(guān)装畅!
this作用域分析:
1.在Page({})里面靠娱,this關(guān)鍵字指代Page({})整個(gè)對(duì)象
2.因此可以通過(guò)this關(guān)鍵字訪問(wèn)或者重新設(shè)置Page({})里data的變量
3.然而在loadData函數(shù)中使用了wx.request({})API這個(gè)方法導(dǎo)致在wx.request({})里沒(méi)辦法使用this來(lái)獲取Page({})對(duì)象
4.雖然在wx.request({})里沒(méi)法使用this獲取Page({})對(duì)象,但是可以在wx.request({})外面先把this存在某個(gè)變量中掠兄,所以就有了 var that =this 這個(gè)聲明像云。此時(shí)that指代Page({})整個(gè)對(duì)象锌雀,這樣子就可以在wx.request({})里使用that訪問(wèn)或者重新設(shè)置Page({})里data的變量