5个关键字: class constructor extends super static

class

class Foo {} 表明创建了一个名为 Foo 的函数,其与 function Foo有以下区别:

  1. class Foo 只能通过new 调用,而 function Foo 即可以new 调用,也可以直接调用。
  2. function Foo 是提升的,而class Foo 不是,因此,在实例化一个类之前,必须先声明它。
  3. 全局作用域中的 class Foo只创建了一个词法标识符 Foo,而function Foo还创建了一个同名的全局对象属性。

    constructor

    指定类函数的函数体内容。

    extends

    class Child extends Father {}
    委托而非继承

  4. 在Child.prototype和Father.prototype之间建立[[Prototype]]委托链接。

这样Child的实例不但可以使用Child.prototyp对象上的方法,还可以像Father的实例一样使用Father.prototype对象上的方法。

  1. 在Child和Father之间也建立了[[Prototype]]委托链接。

这样Child就可以使用Father上的方法。

super

class Child extends Father {}
super的作用根据其所处的位置不同而不同。

  1. 当super在子类的构造器里时,super表示父类的构造器,super必须调用,且在访问this之前调用。
  2. 当super在子类的方法里时,super表示父类的原型对象,即Father.prototype。
  3. 当super在子类的静态方法里时,super表示的就是父类,即Father。

    static

    类分为两部分,一个是静态部分,一个是实例部分,static修饰的静态属性表示的是类的属性,而不是实例的属性。