1、原型链继承(子类原型属性创建父类实例) 优点:非常纯粹的继承关系,实例是子类的实例也是父类的实例;父类新增原型方法或者原型属性,子类都可以访问;简单易于实现; 缺点:无法为子类增加属性和方法,必须再new Animal 执行后才可以;无法实现多继承;创建子类实例时,无法向父类构造函数传参; 来自原型队形的引用属性是所有实例共享
2、构造继承(call 直接继承) 优点 可以实现创建子类的时候,向父类传递参数;可以实现多继承。 缺点 实例并不是父类的实例,只是子类实例;只能继承父类的方法,不能继承父类的原有属性/方法;无法实现函数复用,每个子类都有父类实例函数的副本,影响性能 3、实例继承(子类构造函数中 直接创建父类) 有点:不管new子类还是()。返回对象具有相同效果 缺点:实例是父类实例,不是子类实例;不支持多继承
4、拷贝继承(子类构造函数中 循环处理父类属性) 优点:支持多继承 缺点:效率较低,内存占用高;无法获取父类不可枚举的方法
5 组合继承 通过调用父类构造,继承父类的属性并保留传参的优点,然后通过将父类实例作为子类原型,实现函数复用 优点:既可以继承父类的实例属性和方法也可以继承原型属性和方法 弥补了构造继承 既是子类实例也是父类实例; 不存在引用属性共享问题; 可传参; 函数可复用 缺点:调用了两次父类构造函数,生成了两份实例 、
6 寄生组合继承 核心 通过寄生方式,砍掉父类的实例属性,这样再调用两次父类构造的时候,就不会再初始化两次实例方法/属性,避免了组合继承的缺点