在微信小程序開(kāi)發(fā)中,var that =this的聲明很常見(jiàn)。舉個(gè)例子,代碼如下!
示例代碼1
//index.js Page({ data: { toastHidden: true, }, loadData: function () { var that = this//這里聲明了that;將this存在that里面 wx.request({ url: 'test.php', data: {a: 'a', b: 'b'}, header: { 'content-type': 'application/json' }, success(res) { that.setData({ toastHidden: false }) //這里使用了that,這樣就可以獲取Page({})對(duì)象 }, }) } })在代碼中第9行聲明了var that =this;第17行使用了that。
如果不聲明var that =this,且that改成this,代碼如下!
示例代碼2
//index.js Page({ data: { toastHidden: true, }, loadData: function () { wx.request({ url: 'test.php', data: {a: 'a', b: 'b'}, header: { 'content-type': 'application/json' }, success(res) { this.setData({ toastHidden: false }) }, }) } })此時(shí)運(yùn)行代碼就會(huì)報(bào)以下錯(cuò)誤!

從報(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的變量
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持錯(cuò)新站長(zhǎng)站。
新聞熱點(diǎn)
疑難解答
圖片精選