Object.create用于创建父类原型的干净副本作为子类原型,避免子类修改影响父类及其他子类,实现继承不共享。

寄生组合式继承通过 Object.create 创建父类原型的**干净副本**作为子类原型,从而隔离子类对父类原型的直接修改,避免污染,同时复用父类方法。
为什么需要 Object.create 隔离原型
直接让子类原型等于父类原型(Sub.prototype = Super.prototype)会导致:子类添加方法时实际改了父类原型;子类修改原型属性会影响所有继承自同一父类的其他子类。而 Object.create(Super.prototype) 返回一个新对象,其内部 [[Prototype]] 指向 Super.prototype,但自身是空的——这就实现了“继承不共享”。
Object.create 在寄生组合式继承中的作用位置
它出现在设置子类原型链的关键一步:
- 先调用父类构造函数初始化实例属性(组合式部分)
- 再用
Object.create(Super.prototype)构造子类原型对象 - 把子类自己的方法挂载到这个新原型上
- 修正
constructor指回子类函数
典型实现代码与关键细节
下面是一个标准写法:
在调试 Java 后端 API 故障时使用此技能,尤其适用于以下任务:分析日志、跨 Controller、Service 和 Mapper 层追踪请求、定位异常根因、检查 SQL 执行或参数流转,以及生成简洁的诊断结论与修复方案。
function inheritPrototype(Sub, Super) {
const prototype = Object.create(Super.prototype); // ← 核心:隔离出新原型
prototype.constructor = Sub;
Sub.prototype = prototype;
}
function Super(name) {
this.name = name;
}
Super.prototype.sayName = function() {
console.log(this.name);
};
function Sub(name, age) {
Super.call(this, name); // 继承实例属性
this.age = age;
}
inheritPrototype(Sub, Super); // ← 此处完成原型隔离
Sub.prototype.sayAge = function() {
console.log(this.age);
};
注意:Object.create 返回的对象没有自有属性,只有隐式原型链指向 Super.prototype。这样 Sub.prototype 和 Super.prototype 是两个独立对象,修改前者不会影响后者。
和其它继承方式对比更清晰
相比原型链继承(Sub.prototype = new Super()),它不执行父类构造函数,避免副作用和多余属性;相比借用构造函数(只用 call),它保留了方法复用能力。而 Object.create 正是达成“只继承方法、不执行构造、不共享原型”的技术支点。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










