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。
参考: