继承

tech2022-09-15  99

继承( 继承可以提高代码的复用性)

1 原型链继承

利用原型让一个引用类型继承另一个引用类型的属性和方法 缺点 通过原型实现继承 原型会变成另一个类型的实例 原来的实例属性变成了现在的原型属性 该原型的引用类型属性会被所有实例共享 在创建子类型实例时没有办法在不影响所有对象实例的情况下给超类型构造函数传递参数

2构造函数实现继承

在子类型的构造函数中调用超类型的构造函数 优点 可以向超类传递参数 解决了原型中包含引用类型值被所有实例共享的问题 缺点 方法都是在构造函数中定义的 所以函数复用就无从谈起了 超类型原型中的方法对于子类型而言都是不可见的

3组合继承(原型链+构造函数)

使用原型链继承原型的属性和方法 构造函数实行实例属性的继承 优点 实现了函数复用 每个实例都有自己的属性 可以向超类传递参数 缺点 无论什么情况下 都会调用两次超类构造函数 一次在创建子类原型的时候 一次在子类构造函数内部

4原型式继承(浅拷贝)

借助原型基于已有的对象创建新对象,同时还不必因此创建自定义类型 es5通过新增object.create方法规范了原型式继承,这个方法接收两个参数 一个用作新对象原型的对象 和一个为新对象定义额外属性的对象在传入一个参数的情况下 和object方法行为相同 缺点 和原型链实现继承一样 引用类型值的属性会被所有实例共享

5寄生式继承

就是又创建了一个函数,然后在函数内部定义一个对象来实现原型式继承方式,然后再给这个对象添加方法或属性值, 最后再将这个对象返回,这就成为了寄生式继承方式 缺点 做不到函数复用 包含引用类型值的属性会被所有实例共享

6寄生组合式继承

借用构造函数继承属性 通过原型链的混成形式继承方法 优点 只调用了一次超类型构造函数 效率更高 避免在 SuberType.prototype 上面创建了不必要 多余的属性 与此同时 原型链还能保持不变 因此寄生组合是继承是引用类型最理想的继承方式 es6主要利用class配合extends与super实现继承;

最新回复(0)