extends 是语法糖,封装寄生组合式继承逻辑,强制 super() 调用、自动设置原型链与静态继承;Object.create 仅创建指定原型的对象,不处理构造函数调用或实例属性继承,需手动补全 constructor 和 call/apply。

ES6 的 extends 和 Object.create() 都能实现继承,但它们定位不同:一个是语法层面的**类继承机制**,一个是底层的**原型对象创建工具**,不是同一层级的概念。
extends 是语法糖,封装了完整的继承逻辑
class Child extends Parent 看似简洁,背后强制做了几件事:
- 子类构造函数中必须第一行调用
super(),否则报错;它会初始化this并建立与父类原型的连接 - 自动设置
Child.prototype.__proto__ === Parent.prototype - 自动绑定
Child.__proto__ === Parent(静态方法也能继承) - 确保
new Child() instanceof Parent为true - 底层实际采用的是**寄生组合式继承**——即先用
Parent.call(this)继承实例属性,再用类似Object.create(Parent.prototype)的方式继承原型方法
Object.create 只是创建对象的工具,不自带继承语义
Object.create(proto) 的作用很单纯:返回一个新对象,其 [[Prototype]] 指向 proto。它本身不涉及构造函数、this 绑定或 constructor 修复。
- 常用于手动构建原型链,比如
Child.prototype = Object.create(Parent.prototype) - 它不调用父构造函数,所以无法继承父类的实例属性(如
this.name),只继承原型上的方法 - 需额外补全
constructor指向,否则Child.prototype.constructor仍指向Parent - 单独使用
Object.create不构成“继承”行为,只是原型链的一环;要完整模拟继承,还得配合call/apply等手动操作
关键差异总结
本质区别在于: extends 是面向开发者的设计层抽象,处理构造函数调用、原型链、instanceof、静态属性等一整套语义; Object.create 是面向引擎的底层操作原语,只负责设置对象的原型,其余都得你手写补全。
你可以把 extends 理解为“开箱即用的继承套餐”,而 Object.create 是“螺丝刀+扳手”——功能基础,但组装成完整机器得自己设计结构。


















