object.create 是 javascript 中直接指定新对象原型的底层方式,不调用构造函数;可传入原型对象和属性描述符,支持创建无原型对象,相比字面量和 new 更精确控制原型链。

Object.create 是 JavaScript 中创建对象的底层方式之一,核心作用是**直接指定新对象的原型(__proto__)**,不经过构造函数,也不调用 new。它比字面量或 new Object() 更精确地控制原型链。
基本用法:传入原型对象
最常见写法是传入一个对象作为新对象的原型:
const proto = { sayHello() { return 'Hello'; } };
const obj = Object.create(proto);
console.log(obj.sayHello()); // 'Hello'
console.log(Object.getPrototypeOf(obj) === proto); // true
此时 obj 的内部原型就是 proto,没有自有属性,所有属性都来自原型链。
第二个参数:定义自有属性(类似 Object.defineProperties)
可选的第二个参数是一个属性描述符对象,用于在新对象上添加自有属性(非继承):
- 语法与
Object.defineProperties(obj, descriptors)一致 - 每个属性名对应一个描述符,支持
value、writable、enumerable、configurable、get、set
例如:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
const proto = { type: 'animal' };
const obj = Object.create(proto, {
name: { value: 'Lily', writable: true, enumerable: true },
age: { value: 5, writable: false }
});
console.log(obj.name); // 'Lily'
console.log(obj.type); // 'animal'(继承)
console.log(obj.age); // 5(自有,但不可修改)
创建无原型的对象(慎用)
传入 null 可创建一个“原型为 null”的对象,即不继承任何内置方法(如 toString、hasOwnProperty):
const obj = Object.create(null); console.log(obj.toString); // undefined // obj.hasOwnProperty // 报错:not a function
这种对象常用于实现哈希表或避免原型污染(如 Object.create(null) 常见于 Map-like 结构),但日常开发中需手动补全必要方法或改用 Map。
与 new 和字面量的区别
对比三种创建方式:
-
{}或new Object():原型是Object.prototype -
new Foo():原型是Foo.prototype,且会执行构造函数 -
Object.create(proto):原型严格等于你传入的proto,不执行任何函数,也不依赖构造器
所以当你只需要“干净继承某个特定对象”时,Object.create 最直接、最可控。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










