ES6中Class的用法及在微信小程序中的应用实例
1、ES6的基本用法
ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过class
关键字,可以定义类。基本上,ES6 的class
可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的class
写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。
- class Point {
- constructor(x, y) {
- this.x = x;
- this.y = y;
- }
- toString() {
- return '(' + this.x + ', ' + this.y + ')';
- }
- }
1.1 constructor方法
constructor
方法是类的默认方法,通过new
命令生成对象实例时,自动调用该方法。一个类必须有constructor
方法,如果没有显式定义,一个空的constructor
方法会被默认添加。
- class Point {
- }
- // 等同于
- class Point {
- constructor() {}
- }
上面代码中,定义了一个空的类Point
,JavaScript 引擎会自动为它添加一个空的constructor
方法。
1.2 类的实例
生成类的实例的写法,与 ES5 完全一样,也是使用new
命令。前面说过,如果忘记加上new
,像函数那样调用Class
,将会报错。
- class Point {
- // ...
- }
- // 报错
- var point = Point(2, 3);
- // 正确
- var point = new Point(2, 3);
1.3 取值函数(getter)和存值函数(setter)
与 ES5 一样,在“类”的内部可以使用get
和set
关键字,对某个属性设置存值函数和取值函数,拦截该属性的存取行为。
- class MyClass {
- constructor() {
- // ...
- }
- get prop() {
- return 'getter';
- }
- set prop(value) {
- console.log('setter: '+value);
- }
- }
- let inst = new MyClass();
- inst.prop = 123;
- // setter: 123
- inst.prop
- // 'getter'
1.4 this 的指向
类的方法内部如果含有this
,它默认指向类的实例。但是,必须非常小心,一旦单独使用该方法,很可能报错。
- class Logger {
- printName(name = 'there') {
- this.print(`Hello ${name}`);
- }
- print(text) {
- console.log(text);
- }
- }
- const logger = new Logger();
- const { printName } = logger;
- printName(); // TypeError: Cannot read property 'print' of undefined
上面代码中,printName
方法中的this
,默认指向Logger
类的实例。但是,如果将这个方法提取出来单独使用,this
会指向该方法运行时所在的环境(由于 class 内部是严格模式,所以 this 实际指向的是undefined
),从而导致找不到print
方法而报错。
2.ES6在微信小程序中的应用实例
代码展示:
- //index.js
- import {Card} from './Card/Card.js'; //引用
- const app = getApp()
- Page({
- //初始化数据
- data: {
- cards:{},
- },
- onLoad: function () {
- var url = "https://app.******.com/submit_ajax.ashx?action=APP_GetCardslist";
- var param = {uid:'37906'};
- var carcard = new Card(url,param);
- var that = this;
- //假如回调是同步的,可以使用下面的方法直接取值
- // var cardData = carcard.getCardData();
- carcard.getCardData((data)=>{
- //对数据源进行判断
- if (data.status == '1') {
- that.setData({
- cards: data.result
- })
- console.log(that.data.cards);
- } else {
- wx.showToast({
- title: data.msg,
- icon:'none'
- })
- }
- })
- },
- })
- var util = require("../../../utils/util.js");
- //创建Card对象
- class Card {
- //构造函数,此处提供了两个参数
- constructor(url,parameter) {
- this.url = url;
- this.parameter = parameter;
- }
- getCardData(cb) {
- this.cb = cb;
- util.http(this.url,this.parameter,"POST",this.processCarCardData.bind(this));
- }
- processCarCardData(data) {
- if (!data) {
- return;
- }
- this.cb(data);
- }
- }
- //class对象是个模块,使用export把对象输出出去
- export {Card}
- //util.js
- function http(url,parameter,method, callback) {
- wx.request({
- url: url,
- method: method,
- data:{parameter},
- header: {
- "Content-type": "application/json"
- },
- success: function (res) {
- callback(res.data);
- },
- fail: function () {
- console.log("error");
- }
- });
- }
- module.exports = {
- http:http
- }
感谢:感谢阮一峰大神的《ECMAScript6入门》这本书,本文内容部分选自该书。
ES6中Class的用法及在微信小程序中的应用实例的更多相关文章
- WeChat-SmallProgram:微信小程序中使用Async-await方法异步请求变为同步请求
微信小程序中有些 Api 是异步的,无法直接进行同步处理.例如:wx.request.wx.showToast.wx.showLoading 等.如果需要同步处理,可以使用如下方法: 提示:Async ...
- 全栈开发工程师微信小程序-中(中)
全栈开发工程师微信小程序-中(中) 开放能力 open-data 用于展示微信开放的数据 type 开放数据类型 open-gid 当 type="groupName" 时生效, ...
- 微信小程序中的循环遍历问题
比如:如果在微信小程序中要遍历输出 0-9 的数,我们会使用for循环 ;i<;i++){ console.log(i); } 确实结果也是这样: 但是,如果我在循环时同时调用wx的api接口1 ...
- 微信小程序中this指向作用域问题this.setData is not a function报错
在微信小程序中我们一般通过以下方式来修改data中的数据 this.setData({ index1: e.detail.value }) 比如在函数里面修改数据 bindFaChange1: fun ...
- 微信小程序中使用Async-await方法异步请求变为同步请求
微信小程序中有些 Api 是异步的,无法直接进行同步处理.例如:wx.request.wx.showToast.wx.showLoading等.如果需要同步处理,可以使用如下方法: 注意: Async ...
- 微信小程序中promise的使用
简介 相信看到这篇文章的同学,都已经对微信小程序的api文档有所了解了,也都经历了微信小程序api回调函数嵌套的痛苦,才会想要通过Promise解决回调地狱这个问题,我下面就直接介绍怎么在小程序中使用 ...
- 网页或微信小程序中使元素占满整个屏幕高度
在项目中经常要用到一个容器元素占满屏幕高度和宽度,然后再在这个容器元素里放置其他元素. 宽度很简单就是width:100% 但是高度呢,我们知道的是height:100%必须是在父元素的高度给定了的情 ...
- 在微信小程序中使用富文本转化插件wxParse
在微信小程序中我们往往需要展示一些丰富的页面内容,包括图片.文本等,基本上要求能够解析常规的HTML最好,由于微信的视图标签和HTML标签不一样,但是也有相对应的关系,因此有人把HTML转换做成了一个 ...
- 微信小程序中发送模版消息注意事项
在微信小程序中发送模版消息 参考微信公众平台Api文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html#模版消息管理 此参考地址 ...
随机推荐
- JS 获取元素、修改元素/css样式/标签属性、简单事件、数据类型
基本使用 写在Script 标签里 引入外部js文件:<script src=" "></script> console.log(" " ...
- Bash脚本编程之字符串处理
简介 其实这里说得字符串处理,对应的是bash官网中的[Shell Parameter Expansion],不过直接去看这部分内容实在是太难以理解了.就按照马哥所说的字符串处理会比较好理解,平常使用 ...
- 实战Netty集群
疯狂创客圈 Java 分布式聊天室[ 亿级流量]实战系列之 -25[ 博客园 总入口 ] 1.写在前面 1.1 实战Netty集群的理由 Java基础练习中,一个重要的实战练习是: java的聊天程序 ...
- Python 之列表切片的四大常用操作
最近在爬一个网站的文档的时候,老师要求把一段文字切割开来,根据中间的文本分成两段 故学习了一段时间的切片操作,现把学习成果po上来与大家分享 1.何为切片? 列表的切片就是处理列表中的部分元素,是把整 ...
- Java 学习之路让我帮助很大的书籍
笔主目前从事Java工作已经5年,满打满算下来,从大二上学期接触 Java 到现在也快走过了 7 个年头.在学习 Java 过程中,网上的一些视频还有一些书籍对我帮助都很大.下面就我自己看过的一些书籍 ...
- IT兄弟连 HTML5教程 CSS3属性特效 盒模型阴影
除了为文字添加阴影,我们还可以为盒模型添加阴影.盒模型阴影的属性名称为box-shadow,此属性与text-shadow一样有4个值,前两个值分别表示水平方向位移距离和垂直方向的位移距离,第三个值表 ...
- Jmeter工具使用初体验
一.Jmeter组成部分 一个完整的脚本必须包含以下三项,他们都在测试计划的子选项中,我们直接在测试计划上右键选择即可 线程组 取样器 监视器 二.脚本编写 1.创建线程组 2.添加取样器 我们这里添 ...
- 网站后台getshell
phpmyadmin后台Getshell 获取 web 绝对路径 select @@basedir; 检测是否有写入权限 show global variables like 'secure%' ## ...
- SpringBoot项目里,让TKmybatis支持可以手写sql的Mapper.xml文件
SpringBoot项目通常配合TKMybatis或MyBatis-Plus来做数据的持久化. 对于单表的增删改查,TKMybatis优雅简洁,无需像传统mybatis那样在mapper.xml文件里 ...
- CentOS连接Wifi
原文地址:https://blog.csdn.net/zhuangm_888/article/details/53868451 1. 查看是否需要安装固件 大多无线网卡还需要固件.内核一般会自动探 ...