Class 继承

1.简介

Class 可以通过extends关键字实现继承,这比 ES5 的通过修改原型链实现继承,要清晰和方便很多。
在子类的构造函数中,只有调用super之后,才可以使用this关键字,否则会报错。

2.Object.getPrototypeOf()

Object.getPrototypeOf方法可以用来从子类上获取父类。可以使用这个方法判断,一个类是否继承了另一个类。

3.super 关键字

super这个关键字,既可以当作函数使用,也可以当作对象使用。
super作为函数调用时,代表父类的构造函数。(只能在子类构造方法中使用)
super作为对象时,在普通方法中,指向父类的原型对象;在静态方法中,指向父类。

4.类的 prototype 属性和__proto__属性

Class 作为构造函数的语法糖,同时有prototype属性和__proto__属性,因此同时存在两条继承链。
子类的__proto__属性,表示构造函数的继承,总是指向父类。
子类prototype属性的__proto__属性,表示方法的继承,总是指向父类的prototype属性。

5.原生构造函数的继承

原生构造函数是指语言内置的构造函数,通常用来生成数据结构。ECMAScript 的原生构造函数大致有下面这些。
Boolean()
Number()
String()
Array()
Date()
Function()
RegExp()
Error()
Object()
ES5原生构造函数是无法继承,原生构造函数的this无法绑定,导致拿不到内部属性。
ES6 允许继承原生构造函数定义子类。

6.Mixin 模式的实现

Mixin 模式指的是,将多个类的接口“混入”(mix in)另一个类。