掌握微信小程序 this 指向,轻松编写高质量代码
前言
最近在开发微信小程序时不时会遇到一个很奇怪的问题,有些情况下用
this.setData
可以改变视图显示,有些情况下使用this.setData
无效,这又是为什么呢?
问题描述
在解释这个问题前,我们先来看两段代码:
第一段代码(错误写法)
initOn() {wx.request({url: "接口地址",success: function (res) {this.setData({objs: res.data.map.gdtzxx,});},});
},
第二段代码(正确写法)
initOn() {let that = this;wx.request({url: "接口地址",success: function (res) {that.setData({objs: res.data.map.gdtzxx,});},});
},
通过对比上面的代码我们发现,两者唯一的区别就是在 this
的使用上,第一个是直接使用 this
调用,另一个则是通过 let that = this
,使用 that
来保存当前的 this
的状态才可以更新视图。虽然看似最终的目的是一致的,但是当你运行时,第一种写法就会报如下图的错误:
原因分析
这是因为 this
作用域指向的问题,success
函数实际是一个闭包 , 无法直接通过 this
来 setData
,故就会报错。
但是在 es6
中,使用了箭头函数是不存在这个问题的。原因是因为当我们使用箭头函数时,函数体内的 this
对象,就是定义时所在的对象,而不是使用时所在的对象。并不是因为箭头函数内部有绑定 this
的机制,实际原因是箭头函数根本没有自己的 this
,它的 this
是继承外面的,因此内部的 this
就是外层代码块的 this
。
es6
箭头函数写法
initOn() {wx.request({url: "接口地址",success: (res) => {this.setData({objs: res.data.map.gdtzxx,});},});
},
掌握微信小程序 this 指向,轻松编写高质量代码相关推荐
- 后退一步 小程序_微信小程序返回上一级页面的实现代码
微信小程序返回上一级页面 wx.navigateBack({ delta: 1 //返回上一级页面}) html: 保存 js: //提交 submit(){ let data = this.data ...
- 微信会员卡html修改样式模板,微信小程序 JS动态修改样式的实现代码
微信小程序这个坑啊,js动态修改样式,我们并不能用js或者jq 轻轻松松一行代码搞定.或者用removeClass addClass 来修改样式. 以下是一种动态修改样式的方法,原理是绑定数据,然后动 ...
- php实现轮播图代码,微信小程序实例:轮播图的代码实现与分析
本篇文章给大家带来的内容是关于微信小程序实例:轮播图的代码实现与分析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 本文来说说轮播图,最常见的一个轮播图,中间带小圆点,自动轮播. S ...
- 微信小程序 scroll-view组件实现列表页实例代码
这篇文章主要介绍了微信小程序 scroll-view组件实现列表页实例代码的相关资料,scroll-view组件介绍scroll-view是微信小程序提供的可滚动视图组件,其主要作用是可以用来做手机端 ...
- 下拉多选框 微信小程序_微信小程序下拉框功能的实例代码
微信小程序组件里没有下拉框,正好要用到,记下来以后参考 wxml代码 选择接收班级 {{grade_name}} {{item}} wxss代码 /* 顶部 */ .top{ width: 100vw ...
- Laravel 微信小程序后端实现用户登录的示例代码
Laravel 微信小程序后端实现用户登录的示例代码 这篇文章主要介绍了Laravel 微信小程序后端实现用户登录的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值 ...
- 荐书与免费送书:《编写高质量代码改善 Python 程序的 91 个建议》
为了学习如何打理好微信公众号,Python猫我关注了好几个python技术公众号.然后发现这些同行们都在免费送资源,或者抽奖送书耶.于是,我也去参与抽奖,竟然侥幸抽中啦一本<Python数据科学 ...
- 编写高质量代码改善C#程序的157个建议——建议148:不重复代码
建议148:不重复代码 如果发现重复的代码,则意味着我们需要整顿一下,在继续前进. 重复的代码让我们的软件行为不一致.举例来说,如果存在两处相同的加密代码.结果在某一天,我们发现加密代码有个小Bug, ...
- 《编写高质量代码:改善c程序代码的125个建议》——建议3-5:避免使用浮点数作为循环计数器...
本节书摘来自华章计算机<编写高质量代码:改善c程序代码的125个建议>一书中的第1章,建议3-5,作者:马 伟 更多章节内容可以访问云栖社区"华章计算机"公众号查看. ...
最新文章
- Engineering:王军和张发明组发表人体肠道菌群的原位重建及昼夜节律的研究
- 怎么检查python是否安装成功-如何在Docker中检查是否安装了python包?
- PE文件重定位概念学习
- SpringMVC,MyBatis项目中兼容Oracle和MySql的解决方案及其项目环境搭建配置、web项目中的单元测试写法、HttpClient调用post请求等案例
- Unity 全面理解加载和内存管理
- 解决Response.AddHeader(Content-Disposition, attachment; filename= + file.Name) 中文显示乱码...
- word embedding和contextual embedding
- 使用kubeadm在CentOS上搭建Kubernetes1.14.3集群
- redis与ssm整合(mybatis二级缓存)单机版
- 汉堡按钮html写法,ProtoPie 详解 — 汉堡按钮制作
- 数据挖掘实验二结果(构建cube的三个维度,即三个txt,然后做各种查询)C++实现(代码调试环境为Windows下的CLion使用WSL的Linux)
- Spring Boot中的配置文件使用以及重新加载
- 计算机各盘分配内存,电脑这样分盘,不卡就怪了!
- CentOS7下安装配置zookeeper集群及设置开机自启
- 【hangs】impdp hangs
- NBA表格_双红!34中24!NBA季后赛【掘金vs湖人】
- 阿里、京东、美团等主流互联网公司的最新招聘标准
- 有限差分法-一维波动方程及其Matlab程序实现
- 手把手教你使用Python实现推箱子小游戏(附完整源码)
- 【毕业设计 大作业高分项目】html+php实现个人博客网站
热门文章
- anime+tv+android,Anime TV Watch - KissAnime
- app ui ios airtest +python 环境搭建
- iphone视图屏幕元素-像素大小 目前iphone,ipod touch 屏幕:320*480
- HTML、纯JS实现语音播放,实现定时刻播放
- 校园共享单车停放问题的调研
- 总结JavaScript的数据类型转换
- 第一次用idea写SSM框架的项目就遇到自动注入失败的问题
- 【保姆级】包体积优化教程
- Pandas-时间(二)-数据类型:DatetimeIndex(其中每个元素的类型为:Timestamp)【创建方式:①pd.DatetimeIndex([]);②pd.to_datetime()】
- 论文笔记22:QRNN3D: 3D Quasi-Recurrent Neural Network for Hyperspectral Image Denoising