Object.create 是创建对象并显式指定其原型(__proto__)的标准方法,核心作用是手动构建原型链,不调用构造函数,纯粹设置内部 [[Prototype]]。

Object.create 是创建对象并**显式指定其原型(__proto__)** 的标准方法,核心作用就是手动构建原型链。它不调用构造函数,也不依赖 new,纯粹设置对象的内部 [[Prototype]]。
基本用法:指定原型对象
最常见写法是传入一个对象作为新对象的原型:
-
const obj = Object.create(prototypeObj)—— 创建空对象,其__proto__指向prototypeObj - 如果传
null,新对象没有原型(即__proto__ === null),是真正“干净”的基础对象 - 如果传
Object.prototype(或省略参数),等价于{},原型链末端指向Object.prototype
带属性描述符:初始化自有属性
第二个可选参数是属性描述符对象,用于定义新对象自身的属性(不是原型上的):
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 语法:
Object.create(proto, descriptors) - 例如:
const child = Object.create(parent, { name: { value: 'Alice', writable: true } }); - 此时
child.name是自有属性;而child.toString()会沿原型链找到parent或Object.prototype上的方法
模拟“类继承”:实现子类原型链
常用于手动实现构造函数间的继承关系:
立即学习“Java免费学习笔记(深入)”;
- 先让子类的
prototype继承父类的prototype:Child.prototype = Object.create(Parent.prototype); - 再修复构造器指向:
Child.prototype.constructor = Child; - 之后在
Child.prototype上添加实例方法,它们都会通过原型链被子类实例访问
和 new / 构造函数的区别
关键差异在于执行时机与语义:
-
new Foo()会调用Foo构造函数,并把this.__proto__设为Foo.prototype -
Object.create(Foo.prototype)不执行任何函数,只设置原型,适合纯委托场景(如组合、装饰、轻量级继承) - 它更底层、更可控,是理解原型链本质的“透明窗口”

















