微信小程序开发中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 学习笔记(七)字符串的连接
Dec 31 Javascript
ASP.NET jQuery 实例1(在TextBox里面创建一个默认提示)
Jan 13 Javascript
JavaScript中的slice()方法使用详解
Jun 06 Javascript
使用AngularJS处理单选框和复选框的简单方法
Jun 19 Javascript
基于ajax与msmq技术的消息推送功能实现代码
Dec 26 Javascript
JavaScript Canvas绘制圆形时钟效果
Aug 20 Javascript
jQuery动态添加元素无法触发绑定事件的解决方法分析
Jan 02 jQuery
Js面试算法详解
Apr 08 Javascript
vue组件中的数据传递方法
May 14 Javascript
Javascript的this详解
Mar 23 Javascript
vue element-ui之怎么封装一个自己的组件的详解
May 20 Javascript
vue实现简易音乐播放器
Aug 14 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
用PHP制作静态网站的模板框架(三)
2006/10/09 PHP
php生成QRcode实例
2014/09/22 PHP
PHP超低内存遍历目录文件和读取超大文件的方法
2019/05/01 PHP
基于jQuery的Tab选项框效果代码(插件)
2011/03/01 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
2012/12/11 Javascript
Jquery 自定义动画概述及示例
2013/03/29 Javascript
动态的创建一个元素createElement及删除一个元素
2014/01/24 Javascript
js实现键盘控制DIV移动的方法
2015/01/10 Javascript
javascript如何定义对象数组
2016/06/07 Javascript
javascript中闭包概念与用法深入理解
2016/12/15 Javascript
深入理解Javascript中的valueOf与toString
2017/01/04 Javascript
windows 下安装nodejs 环境变量设置
2017/02/02 NodeJs
微信小程序开发之toast等弹框提示使用教程
2017/06/08 Javascript
JS非行间样式获取函数的实例代码
2018/06/05 Javascript
vue路由传参三种基本方式详解
2019/12/09 Javascript
Vue实现简单的跑马灯
2020/05/25 Javascript
python实现将元祖转换成数组的方法
2015/05/04 Python
python2 与python3的print区别小结
2018/01/16 Python
详解Python Matplot中文显示完美解决方案
2019/03/07 Python
numpy创建单位矩阵和对角矩阵的实例
2019/11/29 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
2020/06/12 Python
基于Python实现2种反转链表方法代码实例
2020/07/06 Python
python3将变量输入的简单实例
2020/08/19 Python
python PIL模块的基本使用
2020/09/29 Python
python 读取串口数据的示例
2020/11/09 Python
HTML5 LocalStorage 本地存储详细概括(多图)
2017/08/18 HTML / CSS
Canvas 帧动画吃苹果小游戏
2020/08/05 HTML / CSS
Reebonz中国官网:新加坡奢侈品购物网站
2017/03/17 全球购物
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
女孩每月服装订阅盒:kidpik
2019/04/17 全球购物
一个SQL面试题
2014/08/21 面试题
幼儿园大班教师个人工作总结
2015/02/05 职场文书
中标通知书
2015/04/17 职场文书
2015年宣传部个人工作总结
2015/05/14 职场文书
工人先锋号事迹材料(2016精选版)
2016/03/01 职场文书
MySQL中rank() over、dense_rank() over、row_number() over用法介绍
2022/03/23 MySQL