复习
没有class和extends,使用混合继承
function Parent(name) {}
function Son(name,age) {
// 一: 调用父类
Parent.call(this,name)
this.age = age
}
// 二:继承原型上方法 --- 不需要参数
Son.prototype = new Parent()
介绍
- 使用关键字
extends
- 子类的
constructor
必须要调用super
原型
- js中的继承依旧是基于
prototype
- 对子类使用
Object.getPrototypeOf(SubClass)
的到是父类
super 关键字
-
super
作为函数
- 只能在构造函数中使用
-
super(param)
相当于Parent.prototype.constructor.call(Son,param)
-
super
作为对象
- 在非静态方法中,
super
指的是父类原型 - 在静态方法中,
super
指的是父类 - 通过
super
对象,调用父类方法,方法中的this
绑定子类的this
-
console.log(super)
报错,因为无法判断super
是对象还是函数 - 对象总是继承对象,对象中可以直接使用
super
两条继承链
Son.__proto__ == Parent
Son.prototype.__proto__ == Parent.prototype
- 子类实例原型的原型指向父类实例的原型
p1.__proto__.__proto__ = p2.__proto__
原生构造函数的继承
原生构造函数大致有,String,Number,Boolean,Array,Date,Function,Object,RegExp
- es5中不允许继承原生构造函数,即使使用“混合继承”的方式,新生成的类不会有原生构造函数的行为
- es6中允许继承原生构造函数
- 在继承
Object
类的时候有行为差异,无法通过super方法向父类Object传参