
回复
1.原型链式继承
原理:子类通过prototype继承父类实例的共享属性和方法。
缺点:
1、所有实例都会共享父类的实例,如若共享属性中有引用数据,其中一个子类实例修改,则全部子类实例都会发生修改。
2、继承单一性,只能继承共享到同一父类实例。
3、子类继承无法向父类传参。
2.构造函数式继承
原理:通过改变父类构造函数的this指向来将父类的构造函数的共享属性/方法复制到子类。
缺点:
1、每次新生成子类实例都会调用父类的构造函数,所以每个子类实例都是独体。
2、只能继承父类构造函数中的静态属性/方法,不能继承父类的原型。
3.组合式继承
原理:通过改变父类构造函数this指向,复制父类构造函数里的共享属性/方法,然后通过prototype继承父类实例的原型。
缺点:
1、一次继承中调用了两次父类,消耗内存。
4.原型式继承
原理:通过用一个函数包装,在函数体内用过渡函数继承父类实例,这个过渡函数就变成了可以随意添加属性的实例或者对象。核心原理和Object.create()一样,类似于复制一个对象。
缺点:
1、无法实现复用,新实例的属性都是后面添加的。
5.寄生式继承
原理:进一步将原型式继承封装成一个函数,进而进行扩展。
缺点:
1、只是通过复制对象属性方法,没有用到prototype,不是意义上的继承,也无法复用。
6.寄生式组合继承