ES6 的class可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。
基本形式
|
说明:
- 类上所有的方法都是定义在类的
prototype属性上面 - 不存在变量提升,必须先定义类再调用
- 类的方法内部如果含有
this,它默认指向类的实例,可以通过在类的constructor内部this.fn = this.fn.bind(this)来解决 - 类的方法前面加关键字
static则不会被实例继承,可以通过类来调用,这称为静态方法。静态方法如果包含this关键字则这个this指向当前类,而不是实例 - 类的静态方法可以被子类继承
- 通过
super关键字表示父类的构造函数super()和指向父类的原型对象super.fn() - 子类的方法可以覆盖父类的同名方法
ES5 的继承实质上是先创造子类的实例对象 this,然后再将父类的方法添加到 this 上面
Parent.apply(this)。ES6 的继承则是先将父类实例对象的属性和方法加到 this 上面(所以必须先调用super()方法),然后再子类的构造函数修改 this。
参考: