1、ES6的基本用法

  ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。基本上,ES6 的class可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。

  1. class Point {
  2. constructor(x, y) {
  3. this.x = x;
  4. this.y = y;
  5. }
  6.  
  7. toString() {
  8. return '(' + this.x + ', ' + this.y + ')';
  9. }
  10. }

  1.1 constructor方法

  constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。一个类必须有constructor方法,如果没有显式定义,一个空的constructor方法会被默认添加。

  1. class Point {
  2. }
  3.  
  4. // 等同于
  5. class Point {
  6. constructor() {}
  7. }

  上面代码中,定义了一个空的类Point,JavaScript 引擎会自动为它添加一个空的constructor方法。

  1.2 类的实例

  生成类的实例的写法,与 ES5 完全一样,也是使用new命令。前面说过,如果忘记加上new,像函数那样调用Class,将会报错。

  1. class Point {
  2. // ...
  3. }
  4.  
  5. // 报错
  6. var point = Point(2, 3);
  7.  
  8. // 正确
  9. var point = new Point(2, 3);

  1.3 取值函数(getter)和存值函数(setter)

  与 ES5 一样,在“类”的内部可以使用getset关键字,对某个属性设置存值函数和取值函数,拦截该属性的存取行为。

  1. class MyClass {
  2. constructor() {
  3. // ...
  4. }
  5. get prop() {
  6. return 'getter';
  7. }
  8. set prop(value) {
  9. console.log('setter: '+value);
  10. }
  11. }
  12.  
  13. let inst = new MyClass();
  14.  
  15. inst.prop = 123;
  16. // setter: 123
  17.  
  18. inst.prop
  19. // 'getter'

  1.4 this 的指向

  类的方法内部如果含有this,它默认指向类的实例。但是,必须非常小心,一旦单独使用该方法,很可能报错。

  1. class Logger {
  2. printName(name = 'there') {
  3. this.print(`Hello ${name}`);
  4. }
  5.  
  6. print(text) {
  7. console.log(text);
  8. }
  9. }
  10.  
  11. const logger = new Logger();
  12. const { printName } = logger;
  13. printName(); // TypeError: Cannot read property 'print' of undefined

  上面代码中,printName方法中的this,默认指向Logger类的实例。但是,如果将这个方法提取出来单独使用,this会指向该方法运行时所在的环境(由于 class 内部是严格模式,所以 this 实际指向的是undefined),从而导致找不到print方法而报错。

2.ES6在微信小程序中的应用实例

  代码展示:

  1. //index.js
  2.  
  3. import {Card} from './Card/Card.js'; //引用
  4. const app = getApp()
  5. Page({
  6. //初始化数据
  7. data: {
  8. cards:{},
  9. },
  10. onLoad: function () {
  11. var url = "https://app.******.com/submit_ajax.ashx?action=APP_GetCardslist";
  12. var param = {uid:'37906'};
  13. var carcard = new Card(url,param);
  14.  
  15. var that = this;
  16. //假如回调是同步的,可以使用下面的方法直接取值
  17. // var cardData = carcard.getCardData();
  18. carcard.getCardData((data)=>{
  19. //对数据源进行判断
  20. if (data.status == '1') {
  21. that.setData({
  22. cards: data.result
  23. })
  24. console.log(that.data.cards);
  25. } else {
  26. wx.showToast({
  27. title: data.msg,
  28. icon:'none'
  29. })
  30. }
  31. })
  32. },
  33.  
  34. })
  1. var util = require("../../../utils/util.js");
  2. //创建Card对象
  3. class Card {
  4. //构造函数,此处提供了两个参数
  5. constructor(url,parameter) {
  6. this.url = url;
  7. this.parameter = parameter;
  8. }
  9.  
  10. getCardData(cb) {
  11. this.cb = cb;
  12. util.http(this.url,this.parameter,"POST",this.processCarCardData.bind(this));
  13. }
  14.  
  15. processCarCardData(data) {
  16. if (!data) {
  17. return;
  18. }
  19. this.cb(data);
  20. }
  21.  
  22. }
  23. //class对象是个模块,使用export把对象输出出去
  24. export {Card}
  1. //util.js
  2.  
  3. function http(url,parameter,method, callback) {
  4. wx.request({
  5. url: url,
  6. method: method,
  7. data:{parameter},
  8. header: {
  9. "Content-type": "application/json"
  10. },
  11. success: function (res) {
  12. callback(res.data);
  13. },
  14. fail: function () {
  15. console.log("error");
  16. }
  17. });
  18. }
  19.  
  20. module.exports = {
  21. http:http
  22. }

  感谢:感谢阮一峰大神的《ECMAScript6入门》这本书,本文内容部分选自该书。

ES6中Class的用法及在微信小程序中的应用实例的更多相关文章

  1. WeChat-SmallProgram:微信小程序中使用Async-await方法异步请求变为同步请求

    微信小程序中有些 Api 是异步的,无法直接进行同步处理.例如:wx.request.wx.showToast.wx.showLoading 等.如果需要同步处理,可以使用如下方法: 提示:Async ...

  2. 全栈开发工程师微信小程序-中(中)

    全栈开发工程师微信小程序-中(中) 开放能力 open-data 用于展示微信开放的数据 type 开放数据类型 open-gid 当 type="groupName" 时生效, ...

  3. 微信小程序中的循环遍历问题

    比如:如果在微信小程序中要遍历输出 0-9 的数,我们会使用for循环 ;i<;i++){ console.log(i); } 确实结果也是这样: 但是,如果我在循环时同时调用wx的api接口1 ...

  4. 微信小程序中this指向作用域问题this.setData is not a function报错

    在微信小程序中我们一般通过以下方式来修改data中的数据 this.setData({ index1: e.detail.value }) 比如在函数里面修改数据 bindFaChange1: fun ...

  5. 微信小程序中使用Async-await方法异步请求变为同步请求

    微信小程序中有些 Api 是异步的,无法直接进行同步处理.例如:wx.request.wx.showToast.wx.showLoading等.如果需要同步处理,可以使用如下方法: 注意: Async ...

  6. 微信小程序中promise的使用

    简介 相信看到这篇文章的同学,都已经对微信小程序的api文档有所了解了,也都经历了微信小程序api回调函数嵌套的痛苦,才会想要通过Promise解决回调地狱这个问题,我下面就直接介绍怎么在小程序中使用 ...

  7. 网页或微信小程序中使元素占满整个屏幕高度

    在项目中经常要用到一个容器元素占满屏幕高度和宽度,然后再在这个容器元素里放置其他元素. 宽度很简单就是width:100% 但是高度呢,我们知道的是height:100%必须是在父元素的高度给定了的情 ...

  8. 在微信小程序中使用富文本转化插件wxParse

    在微信小程序中我们往往需要展示一些丰富的页面内容,包括图片.文本等,基本上要求能够解析常规的HTML最好,由于微信的视图标签和HTML标签不一样,但是也有相对应的关系,因此有人把HTML转换做成了一个 ...

  9. 微信小程序中发送模版消息注意事项

    在微信小程序中发送模版消息 参考微信公众平台Api文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html#模版消息管理 此参考地址 ...

随机推荐

  1. JS 获取元素、修改元素/css样式/标签属性、简单事件、数据类型

    基本使用 写在Script 标签里 引入外部js文件:<script src=" "></script> console.log(" " ...

  2. Bash脚本编程之字符串处理

    简介 其实这里说得字符串处理,对应的是bash官网中的[Shell Parameter Expansion],不过直接去看这部分内容实在是太难以理解了.就按照马哥所说的字符串处理会比较好理解,平常使用 ...

  3. 实战Netty集群

    疯狂创客圈 Java 分布式聊天室[ 亿级流量]实战系列之 -25[ 博客园 总入口 ] 1.写在前面 1.1 实战Netty集群的理由 Java基础练习中,一个重要的实战练习是: java的聊天程序 ...

  4. Python 之列表切片的四大常用操作

    最近在爬一个网站的文档的时候,老师要求把一段文字切割开来,根据中间的文本分成两段 故学习了一段时间的切片操作,现把学习成果po上来与大家分享 1.何为切片? 列表的切片就是处理列表中的部分元素,是把整 ...

  5. Java 学习之路让我帮助很大的书籍

    笔主目前从事Java工作已经5年,满打满算下来,从大二上学期接触 Java 到现在也快走过了 7 个年头.在学习 Java 过程中,网上的一些视频还有一些书籍对我帮助都很大.下面就我自己看过的一些书籍 ...

  6. IT兄弟连 HTML5教程 CSS3属性特效 盒模型阴影

    除了为文字添加阴影,我们还可以为盒模型添加阴影.盒模型阴影的属性名称为box-shadow,此属性与text-shadow一样有4个值,前两个值分别表示水平方向位移距离和垂直方向的位移距离,第三个值表 ...

  7. Jmeter工具使用初体验

    一.Jmeter组成部分 一个完整的脚本必须包含以下三项,他们都在测试计划的子选项中,我们直接在测试计划上右键选择即可 线程组 取样器 监视器 二.脚本编写 1.创建线程组 2.添加取样器 我们这里添 ...

  8. 网站后台getshell

    phpmyadmin后台Getshell 获取 web 绝对路径 select @@basedir; 检测是否有写入权限 show global variables like 'secure%' ## ...

  9. SpringBoot项目里,让TKmybatis支持可以手写sql的Mapper.xml文件

    SpringBoot项目通常配合TKMybatis或MyBatis-Plus来做数据的持久化. 对于单表的增删改查,TKMybatis优雅简洁,无需像传统mybatis那样在mapper.xml文件里 ...

  10. CentOS连接Wifi

    原文地址:https://blog.csdn.net/zhuangm_888/article/details/53868451   1. 查看是否需要安装固件 大多无线网卡还需要固件.内核一般会自动探 ...