1.借用构造函数

在子类的构造函数中通过父类名.call(this)调用父类的构造函数
缺点:不能实现代码的复用,每个实例都会创建自己的方法

2.原型链

将子类的原型设置为父类的实例
缺点:属性都会被实例共享

3.组合方式

借用构造函数继承实例的属性,通过原型继承原型上的属性和方法

4.原型

在一个函数内部有一个临时的构造函数,将父类通过参数传入作为构造函数的原型,最后返回这个临时构造函数的实例来实现继承

5.Class

子类通过extends关键字声明继承与哪一个父类,然后在子类的构造函数constructor中通过super调用父类的构造函数来实现继承