微信小程序开发中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 学习笔记 传智博客佟老师附详细注释
Sep 12 Javascript
JQuery的ajax基础上的超强GridView展示
Sep 18 Javascript
js获取checkbox值的方法
Jan 28 Javascript
JSON简介以及用法汇总
Feb 21 Javascript
AngularJS基础 ng-hide 指令用法及示例代码
Aug 01 Javascript
简单易懂的天气插件(代码分享)
Feb 04 Javascript
jquery之基本选择器practice(实例讲解)
Sep 30 jQuery
vue页面跳转后返回原页面初始位置方法
Feb 11 Javascript
理解 JavaScript EventEmitter
Mar 29 Javascript
js实现ATM机存取款功能
Oct 27 Javascript
JavaScript实现答题评分功能页面
Jun 24 Javascript
vue@cli3项目模板怎么使用public目录下的静态文件
Jul 07 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
PHP获取用户的浏览器与操作系统信息的代码
2012/09/04 PHP
PHP检测数据类型的几种方法(总结)
2017/03/04 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
2017/07/03 PHP
JQuery 选择器、过滤器介绍
2011/02/14 Javascript
JS下拉框内容左右移动效果的具体实现
2013/07/10 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
2013/12/28 Javascript
jquery实现华丽的可折角广告代码
2015/09/02 Javascript
小巧强大的jquery layer弹窗弹层插件
2015/12/06 Javascript
分享jQuery插件的学习笔记
2016/01/14 Javascript
原生JS封装Ajax插件(同域、jsonp跨域)
2016/05/03 Javascript
jQuery实现指定区域外单击关闭指定层的方法【经典】
2016/06/22 Javascript
JS实现的几个常用算法
2016/11/12 Javascript
用jQuery实现优酷首页轮播图
2017/01/09 Javascript
jQuery UI Grid 模态框中的表格实例代码
2017/04/01 jQuery
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
Angular使用Md5加密的解决方法
2017/09/16 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
详解Vue快速零配置的打包工具——parcel
2018/01/16 Javascript
Vue+ElementUI table实现表格分页
2019/12/14 Javascript
[07:09]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant 选手采访
2021/03/11 DOTA
Python探索之Metaclass初步了解
2017/10/28 Python
python保存数据到本地文件的方法
2018/06/23 Python
在Pycharm中项目解释器与环境变量的设置方法
2018/10/29 Python
pygame游戏之旅 添加游戏介绍
2018/11/20 Python
如何基于python实现脚本加密
2019/12/28 Python
Python3如何在Windows和Linux上打包
2020/02/25 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
Web页面中八种创建多列等高(等高列布局)的实现技术
2012/12/24 HTML / CSS
CSS3实现鼠标悬停显示扩展内容
2016/08/24 HTML / CSS
html5+css3实现一款注册表单实例
2013/04/17 HTML / CSS
香港零食网购:上仓胃子
2020/06/08 全球购物
个人社会实践自我鉴定
2014/03/24 职场文书
三问三解心得体会
2014/09/05 职场文书
门卫岗位职责
2015/02/09 职场文书
庭外和解协议书
2016/03/23 职场文书
MySQL数据库必备之条件查询语句
2021/10/15 MySQL