浅谈ECMAScript 6.0(二)
浅谈ECMAScript 6.0(二)
nancy Jane1.class
(1)类的基本定义
- es5中想要创建某种类型的实例对象时,通过构造函数new出来,想要添加某种方法,则添加在其原型上。但是在es6中,我们使用类来实现上述需求。
- ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。
- 类的本质是一个函数
类相当于实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法
1 | <script> |
- 类相当于实例的原型,所有在类中定义的方法,都会被实例继承
- 如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法
1 | class Hobby{ |
1 | console.log(Hobby.prototype);//可见run添加在了constructor中 |
(2)类的继承
所谓继承就是让 子类 具备 父类 的属性和方法。可以通过extends关键字实现继承。
1 | class Drink extends Hobby { |
2.proxy
Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。
1 | // proxy可以帮助我们代理目标对象中所有属性的读写行为 |
3.symbol
- Symbol 值通过Symbol()函数生成。
1 | // 凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。 |
symbol是一种类似于字符串的数据类型。
- Symbol()函数的参数只是表示对当前 Symbol 值的描述
1 | // 相同参数的symbol函数的返回值是不同的 |
- Symbol 值不能与其他类型的值进行运算,会报错。
- Symbol可以显示转换为字符串和布尔值,不可以转换为数值
4.promise
Promise是异步编程的一种解决方案。Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。
总之,promise是一种包含异步任务的对象。(一般比回调函数更加合理和强大)
- promise的特点:
(1)对象的状态不受外界影响。只有异步操作的结果可以决定当前是哪种状态
(2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。只有两种状态改变:从pending变为fulfilled和从pending变为rejected。
- promise的缺点:
一旦新建它就会立即执行,无法中途取消。其次,如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。第三,当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。
- promise创建实例对象
调用then方法可以指定成功或者失败时要做的事情
Promise.prototype.catch()方法是.then(null, rejection)或.then(undefined, rejection)的别名,用于指定发生错误时的回调函数。
1 | let a = new Promise(function (resolve, reject) { |
- promise封装ajax请求
1 | let p = new Promise((resolve, reject) => { |
Promise最大的好处是在异步执行的流程中,把执行代码和处理结果的代码清晰地分离了 解决了层层嵌套。☆
1 | function request(params) { |
5.async与await
async/await 是ES2017(ES8)提出的基于Promise的解决异步的最终方案。
async函数返回一个 Promise对象,语义上理解:当函数前面加上 async 表示函数内部有异步操作。
1 | async function main(){ // 声明一个异步函数 |
await只能在async中使用
特点:
- await 关键字要在 async 关键字函数的内部,await 写在外面会报错。
- 正常情况下,await命令后面是一个 Promise 对象,返回该对象的结果。
- await右侧如果是函数,那么函数的return值就是「表达式的结果」
- await右侧如果是一个 ‘hello’ 或者什么值,那表达式的结果就是 ‘hello’
- await关键字会阻塞后面代码的运行(通过阻塞特点 控制ajax 或者settimeout的执行顺序)
1 | //在 async函数 中, 使用await, 会等待表达式或者当前异步操作有了结果之后, 再去执行后边的语句 |