寄生式继承是为已有对象动态添加专属行为的模式,通过Object.create()创建副本并增强,不修改原对象、不依赖构造函数,适合临时扩展POJO对象。

寄生式继承的核心不是为了构建类体系,而是给**已有对象**动态添加专属行为,不干扰原对象,也不依赖构造函数。
它本质是“原型式继承 + 工厂封装”
先用 Object.create() 或自定义的 object() 函数基于源对象创建新对象,再在这个新对象上直接定义方法或属性,最后返回它。整个过程像“寄生”在原对象之上,生成一个增强版副本。
- 源对象只提供基础结构和共享数据(比如
name、friends数组) - 新对象拥有自己的独有方法(如
sayHi),每次调用都生成独立函数实例 - 不修改源对象,也不影响其他基于它创建的对象
典型写法:一个增强函数封装全部逻辑
把创建、增强、返回打包成一个函数,就像工厂一样产出定制对象:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
function createEnhancedPerson(original) {
const clone = Object.create(original); // 继承原有属性和原型链
clone.sayHi = function() { console.log('Hi!'); };
clone.introduce = function() { console.log(`I'm ${this.name}`); };
return clone;
}
const person = { name: 'Alice', friends: ['Bob', 'Charlie'] };
const enhanced = createEnhancedPerson(person);
enhanced.sayHi(); // Hi!
enhanced.introduce(); // I'm Alice
console.log(enhanced.friends); // ['Bob', 'Charlie']
适合什么场景?
当你有一批配置对象、数据响应体、或第三方返回的简单 POJO,想临时加几个操作方法,又不想改原始结构或引入 class 时,就用它。
立即学习“Java免费学习笔记(深入)”;
- 为 API 返回的用户数据快速添加
getDisplayName()、isPremium() - 给表单字段对象加上
validate()和reset()方法 - 测试中为 mock 对象注入行为,避免污染真实原型
注意它的局限
每个增强对象的方法都是全新函数,无法复用——这跟构造函数模式一样,不适合高频创建大量实例。
- 如果方法逻辑复杂或调用频繁,建议把方法定义在共享原型上(走原型链继承)
- 若需类型识别,增强对象的
constructor仍是Object,没有自定义构造器 - 它不解决“子类继承父类”的建模问题,专注对象级功能补丁

















