1. es6的继承是什么?
    先创建父类的实例this,通过class, extends, super关键字定义子类,并改变this的指向,super本身是指向父类的构造函数但函数返回的是子类的实例,实际上做了父类。Prototype.constructor.call(this)做对象调用时指向父类prototype,从而实现继承。
  2. 解构对象
  3. es6用了什么

(1)let和const声明变量
(2)数组\对象\字符串的解构赋值(匹配模式,只要等号两边的模式相同,左边的变量就会被赋予相应的值,如果解 构不成功,变量的值等于undefined)
(3)字符串方法:includes() startsWith() endsWith()
(4)函数的解构赋值(参数表面上是一个数组,但是传入参数的那一刻就会解构)
(5)class语法
(6)继承(绑定原型,实现继承,或者用extend,constructor里面必须有super)
(7)promise语法。
(8)箭头函数(普通函数、定时器指向window,构造方法、对象方法、原型对象方法指向实例对象)
(9)块级作用域(外级作用域无法读取内层作用域的变量,使得立刻执行函数不再需要,允许在块级作用域声明函数,只在使用大括号的情况成立,未使用会报错)

  1. 同步异步async和await怎么用?

Async作为一个关键字放在函数前面,用于表示函数是一个异步函数;await是等待,只能放到async函数里面,在后面返回一个promise对象的表达式(async和await的原理就是将generator函数和自动执行器包装在一个函数里面)

  1. 箭头函数和普通函数的区别

(1)箭头函数没有prototype,所以箭头函数没有this。
(2)普通函数在非严格模式下指向window,在严格模式指向undefined。
(3)箭头函数在全局作用域下严格模式和非严格模式都指向window
(4)如果箭头函数的this指向window,使用argument会报错;箭头函数指向是普通函数的时候,它的argument会继承改普通函数
(5)使用new调用箭头函数会报错,因为箭头函数没有constructor
(6)箭头函数不支持new target
(7)箭头函数不支持重命名函数参数,普通函数的函数参数支持重命名。

  1. 说说你对promise的理解
    Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件监听——更合理和更强大。Promise 有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。但是无法获取到pending状态,在promise中接受两个内置参数分别是resolve(成功)和reject(失败),Promise实例生成以后,可以用then方法分别指定resolved状态和rejected状态的回调函数。then方法可以传递两个回调函数第一个是成功,第二个是失败,失败回调也可以使用promise的catch方法回调,promise还有一个强大的功能那就是all方法可以组合多个promise实例,包装成一个新的 Promise 实例。
  2. ES6 class 和普通构造函数的区别

class 其实一直是 JS 的关键字(保留字),但是一直没有正式使用,直到 ES6 。 ES6 的 class 就是取代之前构造函数初始化对象的形式,从语法上更加符合面向对象的写法
1. class 是一种新的语法形式,是class Name {…}这种形式,和函数的写法完全不一样
2. 两者对比,构造函数函数体的内容要放在 class 中的constructor函数中,constructor即构造器,初始化实例时默认执行
3. class 中函数的写法是add() {…}这种形式,并没有function关键字
4. 在class中直接extends关键字就可以实现继承,而不像之前的继承实现有多种不同的实现方式,在es6中就只有一种
注意以下两点:
使用extends即可实现继承,更加符合经典面向对象语言的写法,如 Java
子类的constructor一定要执行super(),以调用父类的constructor

  1. ES6 中新增的数据类型有哪些?

Set 和 Map 都是 ES6 中新增的数据结构
Set 类似于数组,但数组可以允许元素重复,Set 不允许元素重复
Map 类似于对象,但普通对象的 key 必须是字符串或者数字,而 Map 的 key 可以是任何数据类型

  1. es6如何转为es5?

使用Babel 转码器,Babel 的配置文件是.babelrc,存放在项目的根目录下。使用 Babel 的第一步,就是配置这个文件。