现代WebGIS开发教程之ES6基础3ES6常用新特性

22次阅读

共计 2050 个字符,预计需要花费 6 分钟才能阅读完成。

开端

 上篇讲述如何调试 ES6 项目,本篇将介绍 ES6 的基本知识,涉及的主要是 ES6 特性,如果系统学习请找相关资料,强烈推荐《ES6 标准入门 (第 3 版)》,在线版本 http://es6.ruanyifeng.com/

ES6 常用特性

定义变量和常量

 ES6 推荐使用 let 定义变量,使用 const 定义常量,而不是原来的 var。为啥,主要有以下原因
 1.var 允许重复定,而 let 和 const 不能在同一作用域中重复定义。如下

// 以下代码没毛病
 function fun(){
    var a =3;
    console.log(a);
    var a = 4;
    console.log(a);
}
// 语法错误
 function fun(){
    let a =3;
    console.log(a);
    let a = 4;
    console.log(a);
}

 2.let 和 var 是块级作用域,var 是顶级作用域。顶级作用域用起来一时爽,用多了就要呵呵了,不知道变量什么时候就被改了,因为在哪里都能定义,在哪里都能引用。

箭头符号

ES6 中很多函数定义都会使用箭头符号 ”=>”,比如:

fun=()=>{
    const a =3;
    console.log(a);
}

 为什么放弃原来的定义方法,换成箭头符号,做过 JavaScript 中前端人员都有被 this 搞糊涂过经历,有了箭头符号就是指路明灯。再也不会把 this 是啥搞错啦,因为箭头符号定的函数体内,this 肯定会是函数所在的对象。

面向对象开发

 是的 ES6 支持面向对象开发,可以定义类,支持类的继承,静态成员,属性设置,一应俱全。
类的定义如下

// 类定义
export default class Animal{
    // 构造函数
    constructor(nickName){
        this._nickName = nickName;
        Animal.count ++;
    }
    // 公有成员函数
    speak(){return "hello";}
    // 私有成员函数
    _say(){return "zzz";}
    // 获取属性
    get NickName(){return this._nickName;}
    // 设置属性
    set NickName(value){this._nickName = value;}
    // 静态方法
    static showCount(){return Animal.count;};
}
// 静态变量
Animal.count = 0;

类的继承也不是问题

export default class Cat extends Animal{constructor(nickName){super(nickName);
    }
    playGame(){return "let's play";}
}
export default class Dog extends Animal{constructor(nickName){super(nickName);
    }
    doorGuard(){return "door guard";}
    speak(){return super.speak() + ', I\'m ' + this._nickName;
    }
}

Promise 和 async

 前端的 IO 或者服务访问都是异步的,比如 http 请求啥的。异步就得有个回调机制 Promise 就是为这个来做的,常用方法 resolve,reject,这是自己定义 Promise 对象用的,但是对于伸手党,更熟悉的应该是 then 吧。这里不展开将如何定义 Promise,使用是这样的。

fetch(`${url}`)
    .then(resp => resp.json())
    .then(json => json.result)

 这么时候的时候还算方便,但是如果需要按顺序调用多个服务呢,那么就需要在 then 中嵌套 fetch,这样就会嵌套好多层,代码那个酸爽。有什么办法呢,于是 async 出现了这货能让你不搞嵌套,写法

export async function getScenes(sceneName) {const result = await fetch(`${url}`)
    .then(resp => resp.json())
    .then(json => json.result);
  return result;
}

 调用,要加上 await。

async function call() {const result = await getScenes('');
}

 很多人以为 fetch 是 ES6 的方法,然鹅不是,fetch 是 DOM 接口,所以在 node.js 中是无法使用的,特此说明。

其他

1. 模板字符串,再也不用拼凑字符串啦,看上一节例子自己找亮点。
2. 数组方法,我讲的是 find,map,reduce 这些,你确定不是讲 hadoop????? 谁用谁知道,比你们写 for 不知道强了多少倍了
3. 解构赋值,Object.assign,嗯,塞私货真方便
4.Reflect 和 Proxy,元编程了解一下,各种动态特性,让你眼花缭乱
5.Decorator,可以预见一波 AOP 的骚操作

“其他”一节提到的没有搞定之前,不要说自己精通 JavaScript,你只是敲开了 JavaScript 的门,还没有进去!

正文完
 0