
原型式继承的核心是 Object.create(),它不依赖构造函数,而是直接以一个对象为原型,创建新对象。向团队解释时,重点不是讲“它是什么”,而是说清“它适合什么场景、为什么不能乱用”。
它解决的实际问题很明确
当你只需要快速复用一个已有对象的结构和行为,且不涉及类、实例化、构造逻辑时,原型式继承最轻量。比如:
- 配置对象的层级扩展(如 baseConfig → devConfig → prodConfig)
- 组件默认 props 的继承(React 类组件中 defaultProps 的朴素模拟)
- 状态初始值的语义化复用({ loading: false, error: null } → { loading: true })
优点:简洁、无侵入、零构造开销
它不新建构造函数,不调用 new,不污染 this 或 prototype 链。只做一件事:让新对象的 [[Prototype]] 指向指定对象。这意味着:
- 内存开销极小——没有多余函数实例,方法天然共享
- 无需定义 constructor,也不用手动修正 prototype.constructor
- 适合纯数据对象或行为容器,逻辑解耦干净
缺点:没有私有属性隔离,也不支持传参初始化
所有通过 Object.create(parent) 创建的对象,都共享 parent 上的引用类型属性。例如:
const parent = { list: [], meta: { id: 1 } };const child1 = Object.create(parent);
const child2 = Object.create(parent);
child1.list.push('a');
console.log(child2.list); // ['a'] ← 意外被改了
同时,它无法向父对象传递初始化参数——因为没执行任何构造逻辑。如果 parent 需要 name 或 timestamp 才能正确工作,原型式继承就无能为力。
和团队沟通时建议这样总结
把它看作“对象快照继承”:适合静态、只读、结构一致的复用;不适合需要独立状态、运行时定制或强类型约束的场景。真正需要“子类行为 + 实例隔离”的地方,该用组合继承或 ES6 class;而 Object.create() 是你工具箱里那把精准的螺丝刀——好用,但别拿它去砍树。











