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


Posted in Javascript onJanuary 18, 2020

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

示例代码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({})对象 
    }, 
   }) 
  } 
 
 })

在代码中第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 }) 
    }, 
   }) 
  } 
 
 })

此时运行代码就会报以下错误!

微信小程序开发中var that =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的变量

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery 操作option的实现代码
Mar 03 Javascript
javascript页面渲染速度测试脚本分享
Apr 15 Javascript
Firefox中使用outerHTML的2种解决方法
Jun 07 Javascript
jquery常用操作小结
Jul 21 Javascript
jQuery中closest()函数用法实例
Jan 07 Javascript
asp.net中oracle 存储过程(图文)
Aug 12 Javascript
hovertree插件实现二级树形菜单(简单实用)
Dec 28 Javascript
jQuery EasyUI的TreeGrid查询功能实现方法
Aug 08 jQuery
vue实现新闻展示页的步骤详解
Apr 11 Javascript
百度小程序自定义通用toast组件
Jul 17 Javascript
基于JavaScript实现控制下拉列表
May 08 Javascript
输入框跟随文字内容适配宽实现示例
Aug 14 Javascript
JavaScript实现滑动门效果
Jan 18 #Javascript
JS数组方法push()、pop()用法实例分析
Jan 18 #Javascript
vue中使用WX-JSSDK的两种方法(推荐)
Jan 18 #Javascript
JS数组方法join()用法实例分析
Jan 18 #Javascript
JavaScript进制转换实现方法解析
Jan 18 #Javascript
js滚轮事件 js自定义滚动条的实现
Jan 18 #Javascript
vue实现扫码功能
Jan 17 #Javascript
You might like
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
2013/06/20 PHP
PHP curl使用实例
2015/07/02 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
2017/10/07 PHP
使用vs code编辑调试php配置的方法
2019/01/29 PHP
php远程请求CURL实例教程(爬虫、保存登录状态)
2020/12/10 PHP
jQuery的学习步骤
2011/02/23 Javascript
jquery实现预览提交的表单代码分享
2014/05/21 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
2014/08/15 Javascript
使用jquery+CSS实现控制打印样式
2014/12/31 Javascript
js实现简单div拖拽功能实例
2015/05/12 Javascript
javascript动态添加checkbox复选框的方法
2015/12/23 Javascript
jQuery zTree树插件简单使用教程
2017/01/10 Javascript
jQuery实现鼠标滑过预览图片大图效果的方法
2017/04/26 jQuery
vue2中使用sass并配置全局的sass样式变量的方法
2018/09/04 Javascript
用node开发并发布一个cli工具的方法步骤
2019/01/03 Javascript
微信小程序实现下滑到底部自动翻页功能
2020/03/07 Javascript
基于原生js实现判断元素是否有指定class名
2020/07/11 Javascript
[01:57]2018年度DOTA2最具潜力解说-完美盛典
2018/12/16 DOTA
python使用SMTP发送qq或sina邮件
2017/10/21 Python
Python中判断输入是否为数字的实现代码
2018/05/26 Python
pyqt5使用按钮进行界面的跳转方法
2019/06/19 Python
详解Python对JSON中的特殊类型进行Encoder
2019/07/15 Python
python+tifffile之tiff文件读写方式
2020/01/13 Python
python:删除离群值操作(每一行为一类数据)
2020/06/08 Python
基于CSS3实现的黑色个性导航菜单效果
2015/09/14 HTML / CSS
详解html5 postMessage解决跨域通信的问题
2018/08/17 HTML / CSS
婚礼主持词
2014/03/13 职场文书
九一八事变演讲稿
2014/09/05 职场文书
2015年评职称工作总结范文
2015/04/20 职场文书
春季运动会加油词
2015/07/18 职场文书
学会感恩主题班会
2015/08/12 职场文书
2016高考寄语或鼓励的话语
2015/12/04 职场文书
某药房的新员工入职告知书!
2019/07/15 职场文书
Pytest allure 命令行参数的使用
2021/04/18 Python
每日六道java新手入门面试题,通往自由的道路
2021/06/30 Java/Android
解决Git推送错误non-fast-forward的方法
2022/06/25 Servers