寄生式继承的核心是封装函数增强已有对象并返回新对象。它接收原始对象,用object.create创建继承其原型的副本,再添加专属方法(如sayhi),最后返回解耦的新对象,适用于无需构造函数的轻量对象扩展场景。

寄生式继承的核心是“封装一个函数,用它来增强已有对象并返回新对象”,不依赖构造函数,适合面向对象但无需类型定义的场景。
封装继承逻辑的关键三步
寄生式继承本质是一个增强函数:接收原始对象 → 创建副本 → 添加新能力 → 返回结果。整个过程不修改原对象,也不引入 new 或 this 绑定逻辑。
- 用 Object.create(original) 创建干净副本,确保原型链继承完整
- 在副本上直接添加实例方法或属性(如
sayHi),这些属于该对象独有 - 函数最后 return clone,调用者拿到的是增强后的新对象,与原对象解耦
典型封装示例
下面是一个可复用的 createAnother 函数,它把继承逻辑完全封装起来:
Object.create 替代旧式 Object(),更准确反映原型关系)
-
输入:任意基础对象(如
person) - 内部:生成继承其原型的新对象,并附加定制行为
- 输出:独立对象,既有父级能力,又有专属方法
适用场景与限制
它最适合对单个对象做轻量扩展,比如配置对象、临时数据载体或插件式增强。
- ✅ 无需定义类或构造函数,代码简洁
- ✅ 原型链保持完整,能访问基础对象的原型方法
- ❌ 方法无法复用——每个增强对象都拥有自己的函数副本,内存开销随实例增长
- ❌ 不支持传参初始化,所有增强逻辑需在函数体内硬编码或依赖闭包
和寄生组合式继承的区别
别混淆名字相似的两种模式:寄生式继承操作的是对象,而寄生组合式继承操作的是构造函数。
- 前者用于“给一个现有对象加功能”,比如
createAnother(person) - 后者用于“让子类正确继承父类”,比如
inherit(Dog, Animal),解决构造函数调用两次的问题 - 寄生组合式继承是类型层面的继承方案;寄生式继承是对象层面的增强技巧











