object.create 是 javascript 中显式指定原型创建对象的标准方法,不调用构造函数;传入对象作原型,传 null 得无原型空对象,支持属性描述符配置,常用于原型继承、防污染及模拟对象。

Object.create 是 JavaScript 中创建对象并**显式指定其原型(prototype)** 的标准方法。它不调用构造函数,也不依赖 new,而是直接以你传入的对象为原型,生成一个新对象。
基本用法:指定原型对象
语法很简单:
const obj = Object.create(prototypeObj);
其中 prototypeObj 就是新对象的 [[Prototype]](即 obj.__proto__ 指向它)。
- 如果传
null,新对象没有原型(即__proto__ === null),是个“纯净”的空对象,toString、hasOwnProperty等方法都不可用。 - 如果传普通对象(如
{a: 1}),新对象会继承该对象的自有属性(作为原型属性)。
常见写法示例
✅ 正确设置原型并添加自有属性:
const animal = {
eat() { return 'eating...'; }
};
<p>const dog = Object.create(animal);
dog.name = 'Buddy'; // 自有属性
console.log(dog.eat()); // 'eating...'(从 animal 继承)
console.log(dog.name); // 'Buddy'(自身拥有)</p>
✅ 一步到位:用第二个参数定义自有属性(类似 Object.defineProperties):
const cat = Object.create(animal, {
name: { value: 'Whiskers', writable: true, enumerable: true },
age: { value: 3, writable: false }
});
这样避免了后续赋值,还能精确控制属性描述符(writable、enumerable、configurable)。
和构造函数 new 的区别
Object.create 不执行任何初始化逻辑,它只做一件事:设置原型链。
-
new Person()会调用Person构造函数,可能修改this、执行副作用、返回自定义对象等。 -
Object.create(Person.prototype)只创建一个空对象,其__proto__指向Person.prototype,不运行任何代码。
所以它常用于手动模拟原型继承,或实现轻量级对象工厂。
实用场景
- 实现类式继承(如子类原型继承父类原型):
Child.prototype = Object.create(Parent.prototype); - 创建无原型的安全对象(防原型污染):
Object.create(null) - 测试中快速构造具有特定原型链的模拟对象
- 替代
{}创建“干净”对象(尤其当你不希望继承Object.prototype方法时)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











