持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天
点击查看活动详情
一、ES6 的继承和 ES5 的继承有什么区别
es5 的继承是通过原型或者是构造函数机制来实现,es6 用过 class 关键字定义类,里面有构造方法,类之间通过 extends 关键字实现,子类必须在 constructor 方法中调用 super 方法
二、var、let、const 之间的区别
var 声明变量可以重复声明,而 let 不可以重复声明
var 是不受限于块级的,而 let 是受限于块级
var 会与 window 相映射(会挂一个属性),而 let 不与 window 相映射
var 可以在声明的上面访问变量,而 let 有暂存死区,在声明的上面访问变量会报错
const 声明之后必须赋值,否则会报错
const 定义不可变的量,改变了就会报错
const 和 let 一样不会与 window 相映射、支持块级作用域、在声明的上面访问变量会报错
三、Class、extends 是什么,有什么作用
ES6 的 class 可以看作只是一个 ES5 生成实例对象的构造函数的语法糖。它参考了 java 语言,定义了一个类的概念,让对象原型写法更加清晰,对象实例化更像是一种面向对象编程。Class类可以通过 extends 实现继承。它和 ES5 构造函数的不同点:
1.类的内部定义的所有方法,都是不可枚举的。
2.ES6 的 class 类必须用 new 命令操作,而 ES5 的构造函数不用 new 也可以执行。
3.ES6 的 class 类不存在变量提升,必须先定义 class 之后才能实例化,不像 ES5 中可以将构造函数写在实例化之后。
4.ES5 的继承,实质是先创造子类的实例对象 this,然后再将父类的方法添加到 this 上面。ES6的继承机制完全不同,实质是先将父类实例对象的属性和方法,加到 this 上面(所以必须先调用 super 方法),然后再用子类的构造函数修改 this。