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)另一个类。