object.create 是 javascript 中显式指定原型创建新对象的核心方法,不调用构造函数,纯粹以给定对象为原型生成干净新对象;支持仅传原型对象或同时传属性描述符来定义自有属性,常用于纯原型继承、创建无原型对象及模拟类式继承。

Object.create 是 JavaScript 中用于**显式指定原型**创建新对象的核心方法。它不调用构造函数,也不影响原型链上的 constructor 属性,纯粹是“以某个对象为原型,生成一个干净的新对象”。
基本用法:传入一个原型对象
最常见写法是只传一个参数 —— 你想让新对象继承的原型对象:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- const obj = Object.create(prototypeObj);
- 此时 obj.__proto__ === prototypeObj 为 true
- 新对象自身属性为空(Object.keys(obj) 返回空数组),所有可枚举/不可枚举的继承属性都来自 prototypeObj
进阶用法:同时定义自有属性(通过属性描述符)
第二个参数是属性描述符对象,用来给新对象添加自有属性(类似 Object.defineProperties 的第二个参数):
- const obj = Object.create(proto, { name: { value: 'Alice', writable: true } });
- 这里 name 是 obj 自身的属性,不是从 proto 继承来的
- 每个键对应一个属性描述符(value/writable/enumerable/configurable/get/set),和 Object.defineProperty 规则一致
常见典型场景
- 实现纯原型继承:避免使用 new 构造函数,直接复用已有对象作为原型
- 创建无原型对象:用 Object.create(null) 得到一个不继承 Object.prototype 的“干净”对象(常用于哈希表、配置对象,避免 hasOwnProperty 等属性干扰)
- 模拟类式继承的底层逻辑:比如 Child.prototype = Object.create(Parent.prototype); 是手动设置原型链的经典写法
注意点
- 如果第一个参数是 null,新对象没有原型(__proto__ 为 undefined),不能访问 toString、hasOwnProperty 等默认方法
- 传入非对象值(如数字、字符串)会抛出 TypeError,必须是对象或 null
- 不触发任何构造函数,也不会设置 constructor 属性 —— 如果需要,得手动补上:obj.constructor = SomeConstructor;
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










