微信小程序开发中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 相关文章推荐
同一个表单 根据要求递交到不同页面的实现方法小结
Aug 05 Javascript
ASP 过滤数组重复数据函数(加强版)
May 31 Javascript
javascript中encodeURI和decodeURI方法使用介绍
May 06 Javascript
快速学习jQuery插件 Cookie插件使用方法
Dec 01 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
Dec 02 Javascript
学习JavaScript设计模式之代理模式
Jan 12 Javascript
AngularJS过滤器filter用法总结
Dec 13 Javascript
jQuery模拟窗口抖动效果
Mar 15 Javascript
JavaScript获取URL参数的方法之一
Mar 24 Javascript
基于jQuery使用Ajax动态执行模糊查询功能
Jul 05 jQuery
vue 列表页跳转详情页获取id以及详情页通过id获取数据
Mar 27 Javascript
解决Vue 移动端点击出现300毫秒延迟的问题
Jul 21 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
不用数据库的多用户文件自由上传投票系统(3)
2006/10/09 PHP
PHP中Session引起的脚本阻塞问题解决办法
2014/04/08 PHP
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
JS原型对象通俗"唱法"
2012/12/27 Javascript
Js 导出table内容到Excel的简单实例
2013/11/19 Javascript
完美兼容各大浏览器的jQuery仿新浪图文淡入淡出间歇滚动特效
2014/11/12 Javascript
js获取元素外链样式的方法
2015/01/27 Javascript
JavaScript检查数字是否为整数或浮点数的方法
2015/06/09 Javascript
jQuery实现标题有打字效果的焦点图代码
2015/11/16 Javascript
jQuery中ajax的load()与post()方法实例详解
2016/01/05 Javascript
BootStrap中Tab页签切换实例代码
2016/05/30 Javascript
jQuery制作图片旋转效果
2017/02/02 Javascript
在vue.js中抽出公共代码的方法示例
2017/06/08 Javascript
详解VUE中v-bind的基本用法
2017/07/13 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
关于vue中 $emit的用法详解
2018/04/12 Javascript
boostrap模态框二次弹出清空原有内容的方法
2018/08/10 Javascript
vant IndexBar实现的城市列表的示例代码
2019/11/20 Javascript
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
python同时给两个收件人发送邮件的方法
2015/04/30 Python
Python yield 使用浅析
2015/05/28 Python
1 行 Python 代码快速实现 FTP 服务器
2018/01/25 Python
windows下python安装小白入门教程
2018/09/18 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
2019/04/09 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
2019/05/21 Python
python for循环remove同一个list过程解析
2019/08/14 Python
Python字符串格式化输出代码实例
2019/11/22 Python
Django数据库操作之save与update的使用
2020/04/01 Python
TensorFlow固化模型的实现操作
2020/05/26 Python
班级德育工作实施方案
2014/02/21 职场文书
工伤事故证明
2014/10/20 职场文书
讲文明倡议书
2015/04/29 职场文书
外出听课学习心得体会
2016/01/15 职场文书
仅用几行Python代码就能复制她的U盘文件?
2021/06/26 Python
MySQL选择合适的备份策略和备份工具
2022/06/01 MySQL
一篇文章带你掌握SQLite3基本用法
2022/06/14 数据库