微信小程序开发中 var that =this的用法

在微信小程序开发中,var that =this的声明很常见。举个例子,代码以下!php

示例代码1json

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。小程序

若是不声明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  })

此时运行代码就会报如下错误!
微信

从报错中得知setData这个属性读不到,为什么读不到?这跟this关键字的做用域有关!app

this做用域分析:函数

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

2.所以能够经过this关键字访问或者从新设置Page({})里data的变量url

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

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

相关文章
相关标签/搜索