ES6的干货知识复习(三)

93 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

大家好,我是不孤独的孤独,今天整理的是ES6的的一些常见知识问答,方便大家在跳槽时候,拉出来看看这些问题。

Class的作用

ES6 的class可以看作只是一个ES5生成实例对象的构造函数的语法糖。它参考了java语言,定义了一个类的概念,让对象原型写法更加清晰,对象实例化更像是一种面向对象编程。Class类可以通过extends实现继承。

和ES5构造函数的不同点如下:

  • ES6的class类必须用new命令操作,而ES5的构造函数不用new也可以执行。

  • ES6的class类不存在变量提升,必须先定义class之后才能实例化,不像ES5中可以将构造函数写在实例化之后。

  • 类的内部定义的所有方法,都是不可枚举的。

  • ES5 的继承,实质是先创造子类的实例对象this,然后再将父类的方法添加到this上面。ES6 的继承机制完全不同,实质是先将父类实例对象的属性和方法,加到this上面(所以必须先调用super方法),然后再用子类的构造函数修改this。

async函数的作用

async函数可以理解为内置自动执行器的Generator函数语法糖,它配合ES6的Promise近乎完美的实现了异步编程解决方案。

Iterator的作用

因为ES6新增了Set、Map类型,他们和Array、Object类型很像,Array、Object都是可以遍历的,但是Set、Map都不能用for循环遍历,解决这个问题有两种方案,一种是为Set、Map单独新增一个用来遍历的API,另一种是为Set、Map、Array、Object新增一个统一的遍历API,显然,第二种更好,ES6也就顺其自然的需要一种设计标准,来统一所有可遍历类型的遍历方式——Iterator就诞生了。

Iterator标准规定,所有部署了key值为[Symbol.iterator],且[Symbol.iterator]的value是标准的Iterator接口函数的对象,都称之为可遍历对象,next()后返回的Iterator对象也就是Iterator遍历器。

标准的Iterator接口函数: 该函数必须返回一个对象,且对象中包含next方法,且执行next()能返回包含value/done属性的Iterator对象。

(感觉几句话并不是很能理解,还是得单独拎出去写~)

Generator函数的作用

Generator函数可以说是Iterator接口的具体实现方式,就和JavaScript是ECMAScript标准的一种具体实现、Iterator遍历器是Iterator的具体实现是一样的道理。

执行Generator函数会返回一个遍历器对象,每一次Generator函数里面的yield都相当一次遍历器对象的next()方法,并且可以通过next(value)方法传入自定义的value,来改变Generator函数的行为。

Generator函数可以通过配合Thunk 函数更轻松更优雅的实现异步编程和控制流管理。

Promise的作用

Promise是ES6引入的一个新的对象,主要作用是用来解决JS异步机制里,回调机制产生的“回调地狱”。封装了异步回调形式,使得异步回调可以写的更加优雅,可读性更高,而且可以链式调用。