微信小程序开发中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 相关文章推荐
Javascript 两个窗体之间传值实现代码
Sep 25 Javascript
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
Feb 07 Javascript
JavaScript中String和StringBuffer的速度之争
Apr 01 Javascript
javascript中动态加载js文件多种解决办法总结
Nov 15 Javascript
jquery showModelDialog的使用方法示例详解
Nov 19 Javascript
javascript之IE版本检测超简单方法
Aug 20 Javascript
jQuery删除节点用法示例(remove方法)
Sep 08 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
Feb 19 Javascript
jQuery实现简单日期格式化功能示例
Sep 19 jQuery
详解如何在项目中使用jest测试react native组件
Feb 09 Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
Nov 18 Javascript
jquery实现聊天机器人
Feb 08 jQuery
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
图形数字验证代码
2006/10/09 PHP
PHP 简单数组排序实现代码
2009/08/05 PHP
PHP实现电商订单自动确认收货redis队列
2017/05/17 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
PHP常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
JavaScript Event学习第四章 传统的事件注册模型
2010/02/07 Javascript
很好用的js日历算法详细代码
2013/03/07 Javascript
深入浅析Node.js 事件循环
2015/12/20 Javascript
搞定immutable.js详细说明
2016/05/02 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
2016/07/22 Javascript
vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
2017/09/28 Javascript
Vue实现active点击切换方法
2018/03/16 Javascript
微信小程序实现圆形进度条动画
2020/11/18 Javascript
解决layer图标icon不加载的问题
2019/09/04 Javascript
Jquery高级应用Deferred对象原理及使用实例
2020/05/28 jQuery
python计算最小优先级队列代码分享
2013/12/18 Python
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
举例讲解Python中的死锁、可重入锁和互斥锁
2015/11/05 Python
查看django执行的sql语句及消耗时间的两种方法
2018/05/29 Python
Pycharm配置远程调试的方法步骤
2018/12/17 Python
Python Image模块基本图像处理操作小结
2019/04/13 Python
python 模拟银行转账功能过程详解
2019/08/06 Python
python实现树的深度优先遍历与广度优先遍历详解
2019/10/26 Python
python中return的返回和执行实例
2019/12/24 Python
浅谈keras的深度模型训练过程及结果记录方式
2020/01/24 Python
tensorflow pb to tflite 精度下降详解
2020/05/25 Python
html5 Canvas画图教程(9)—canvas中画出矩形和圆形
2013/01/09 HTML / CSS
中文教师求职信
2014/02/22 职场文书
《邮票齿孔的故事》教学反思
2014/02/22 职场文书
集中采购方案
2014/06/10 职场文书
法语专业求职信
2014/07/20 职场文书
竞选学委演讲稿
2014/09/13 职场文书
交通事故赔偿协议书怎么写
2014/10/04 职场文书
关于vue中如何监听数组变化
2021/04/28 Vue.js
SQL Server数据库查询出现阻塞之性能调优
2022/04/10 SQL Server