寄生组合式继承旨在解决组合式继承中构造函数执行两次及原型重复挂载问题,是ES5下最接近理想继承的方案;其本身不新增冗余,而是消除冗余,实际冗余多源于实现细节或类设计不当。

避免手动重复写寄生逻辑
每次写子类都手写 Sub.prototype = Object.create(Parent.prototype) + Sub.prototype.constructor = Sub,确实容易出错且重复。
- 封装一个复用函数,比如
inherits(Child, Parent),内部统一处理原型链重设和 constructor 修正 - ES6 后直接用
class+extends,底层自动完成寄生组合式继承逻辑,无需手动干预
减少子类中不必要的方法覆盖
如果多个子类只因一两个字段或行为不同就各自定义完整方法,就会造成逻辑重复。
- 把可变部分抽成配置项或钩子方法(如
beforeMethod()),基类统一调用 - 用模板方法模式:基类定义骨架,子类只实现差异步骤,避免整段逻辑复制
用组合替代深层继承来降低耦合
当“继承链过长”或“子类间共性少、差异多”时,强行用继承反而增加维护成本。
- 把通用能力拆成独立工具类或策略类,通过属性注入(
self.formatter、self.validator)复用 - 例如日期格式化、错误上报等横切逻辑,更适合用组合或 mixin,而非塞进继承树
用 Mixin 补充多维度行为复用
当多个不相关的类需要相同功能(如日志、序列化、权限检查),用单继承无法共享,硬塞进父类又破坏语义。
- 定义
LoggableMixin、SerializableMixin等,仅包含特定能力 - 通过多重继承混入:
class User(LoginMixin, SerializableMixin):,各 mixin 互不影响 - 比层层继承更轻量,也避免了“为了复用而拉长继承链”带来的冗余

















