寄生式继承通过object.create()克隆原对象并动态添加方法或属性,不修改原对象、保持纯净,支持运行时差异化配置,但每次增强都新建函数实例,存在内存开销。

寄生式继承通过封装一个“增强过程”的函数,在复制出的对象上直接添加新属性或方法,从而扩展其功能。它不依赖构造函数,也不修改原对象,而是返回一个全新但能力更强的副本。
在克隆对象后动态添加方法
核心操作是先用 Object.create()(或自定义的 object() 函数)创建原对象的副本,再为这个副本挂载专属行为:
- 新增方法:比如给克隆体添加
sayHi()、cloneWithLog()等独立逻辑 - 覆盖已有方法:可重写从原型继承来的方法,实现定制化行为
- 注入私有数据:在闭包中维护仅该实例可访问的状态
支持运行时差异化配置
增强逻辑可以接收参数,让每次克隆生成的对象具备不同特征:
- 传入初始值,如
createAnother(person, { prefix: "Hello" }) - 根据条件决定是否添加某功能,比如只对管理员对象加
deleteUser() - 绑定特定上下文,如把
this.logger指向某个日志实例
保持原对象纯净,避免副作用
所有增强都作用于新对象,不影响原始数据源:
- 原对象
person不会多出sayHi,也不会被修改内部结构 - 多个克隆体之间互不影响,各自拥有独立的方法和状态
- 适合处理配置对象、DTO、临时视图模型等一次性增强场景
注意函数无法复用带来的开销
每次增强都新建函数实例,不适合高频调用或大量对象场景:
-
clone.sayHi = function() { ... }每次都生成新函数,内存占用上升 - 若需共享方法,应将通用逻辑抽离到独立函数或混入对象,而非重复定义
- 对性能敏感场景,建议优先考虑寄生组合式继承或 ES6 class + extends
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











