object.create() 用于显式指定新对象的原型,第一个参数必须是对象或null,第二个参数可定义自有属性描述符;传入null创建无原型对象,不可用原始值或函数作原型。

用 Object.create() 显式指定新对象的原型,核心是把目标原型对象作为第一个参数传入,就能让新对象的 [[Prototype]] 指向它。
基本用法:只设原型
最常见的方式是传入一个对象作为原型,返回的新对象会以该对象为原型:
const parent = {
greet() {
return 'Hello';
}
};
const child = Object.create(parent);
console.log(child.greet()); // 'Hello'
console.log(Object.getPrototypeOf(child) === parent); // true
同时设置自有属性(第二个参数)
第二个参数是属性描述符对象,类似 Object.defineProperties() 的格式,用于定义新对象自身的可枚举/不可枚举、可写/不可写等属性:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
const proto = { shared: 'I am on prototype' };
const obj = Object.create(proto, {
name: {
value: 'Alice',
writable: true,
enumerable: true,
configurable: true
},
age: {
value: 30,
writable: false // 不可修改
}
});
console.log(obj.name); // 'Alice'
console.log(obj.age); // 30
console.log(obj.shared); // 'I am on prototype'(从原型继承)
console.log('name' in obj); // true
console.log('shared' in obj); // true(in 包含继承属性)
创建无原型对象(如 Object.create(null))
传入 null 可创建一个“干净”的对象,不继承 Object.prototype 上的任何方法(比如没有 toString、hasOwnProperty):
const noProto = Object.create(null); console.log(noProto.toString); // undefined console.log(noProto.hasOwnProperty); // undefined // 适合做纯哈希表或避免原型污染的场景
注意:不能用普通函数或原始值作原型
Object.create() 要求第一个参数必须是对象或 null。传入 undefined、数字、字符串等会报错:
Object.create(42); // TypeError
Object.create('hello'); // TypeError
Object.create(undefined); // TypeError
Object.create(null); // ✅ 合法
Object.create({}); // ✅ 合法
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










