微信小程序开发中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 绑定事件时传递参数的实现方法
Oct 13 Javascript
EasyUI 中 MenuButton 的使用方法
Jul 14 Javascript
SeaJS入门教程系列之使用SeaJS(二)
Mar 03 Javascript
javascript检查浏览器是否支持flash的实现代码
Aug 14 Javascript
ES6中Array.find()和findIndex()函数的用法详解
Sep 16 Javascript
vue2.0与bootstrap3实现列表分页效果
Nov 28 Javascript
详解基于vue-cli配置移动端自适应
Jan 13 Javascript
Vue.use源码学习小结
Jun 20 Javascript
微信小程序自定义toast的实现代码
Nov 16 Javascript
vue store之状态管理模式的详细介绍
Jun 13 Javascript
JavaScript静态作用域和动态作用域实例详解
Jun 17 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
Feb 18 Vue.js
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
dedecms模板标签代码官方参考
2007/03/17 PHP
fgetcvs在linux的问题
2012/01/15 PHP
PHP获取用户的浏览器与操作系统信息的代码
2012/09/04 PHP
基于PHP实现数据分页显示功能
2016/05/26 PHP
CodeIgniter框架实现的整合Smarty引擎DEMO示例
2019/03/28 PHP
javascript 保存文件到本地实现方法
2012/11/29 Javascript
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
2015/12/15 Javascript
jquery拖拽排序简单实现方法(效果增强版)
2016/02/16 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
2016/05/28 Javascript
Windows系统下安装Node.js的步骤图文详解
2016/11/15 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
2017/03/08 Javascript
实例解析Vue.js下载方式及基本概念
2018/05/11 Javascript
JavaScript禁用右键单击优缺点分析
2019/01/20 Javascript
vue实现购物车抛物线小球动画效果的方法详解
2019/02/13 Javascript
Vue中computed、methods与watch的区别总结
2019/04/10 Javascript
JS正则表达式验证密码强度
2020/03/18 Javascript
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
基于vue 动态菜单 刷新空白问题的解决
2020/08/06 Javascript
wxPython 入门教程
2008/10/07 Python
Python操作json数据的一个简单例子
2014/04/17 Python
使用Kivy将python程序打包为apk文件
2017/07/29 Python
Python从文件中读取指定的行以及在文件指定位置写入
2019/09/06 Python
解决Python中回文数和质数的问题
2019/11/24 Python
python实现飞机大战项目
2020/03/11 Python
python3 配置logging日志类的操作
2020/04/08 Python
解决python3.6用cx_Oracle库连接Oracle的问题
2020/12/07 Python
python3中for循环踩过的坑记录
2020/12/14 Python
CSS3 box-sizing属性详解
2016/11/15 HTML / CSS
介绍一下SQL中union,intersect和minus
2012/04/05 面试题
几个常见的软件测试问题
2016/09/07 面试题
高中班长自我鉴定
2013/12/20 职场文书
办公室人员先进事迹
2014/01/27 职场文书
党性观念心得体会
2014/09/03 职场文书
离开雷锋的日子观后感
2015/06/09 职场文书
Python使用海龟绘图实现贪吃蛇游戏
2021/06/18 Python