object.create 不用于创建浅拷贝,它仅创建以指定对象为原型的新空对象,自身无自有属性,所有属性均通过原型链访问;浅拷贝需复制第一层自有属性,应使用 object.assign({}, obj) 或展开运算符 {...obj}。

Object.create 本身**不用于创建浅拷贝实例**,它创建的是一个**以指定对象为原型的新空对象**,和“拷贝”(尤其是浅拷贝)在语义与行为上完全不同。
Object.create 的真实作用:设置原型链
它只做一件事:让新对象的 [[Prototype]](即 __proto__)指向你传入的对象。新对象自身是空的,不包含任何自有属性。
例如:
const original = { a: 1, b: { c: 2 } };
const clone = Object.create(original);
console.log(clone.a); // 1 ← 从原型读取
console.log(clone.hasOwnProperty('a')); // false ← 自身没有 a
console.log(clone.b.c); // 2 ← b 是原型上的引用
这里 clone 并不是 original 的拷贝,而是一个“代理式继承者”——所有属性都靠原型链访问,修改 clone.b.c 会直接影响 original.b.c,因为它读写的是同一个嵌套对象。
为什么它不是浅拷贝?
- 浅拷贝要求:新对象拥有**自有属性**,且对原始对象的**基本类型值独立,引用类型值仍共享**;
-
Object.create创建的对象:**无自有属性**,所有属性都来自原型,连基本类型都是“只读式共享”(不可直接覆盖,除非显式赋值); - 它不遍历、不复制属性,不满足拷贝的定义。
想实现浅拷贝,该用什么?
以下方法才是标准的浅拷贝手段(仅复制第一层):
Object.assign({}, obj)-
{ ...obj }(展开语法) -
structuredClone(obj)(深拷贝,但注意兼容性;浅拷贝不用它)
例如:
const original = { a: 1, b: { c: 2 } };
const shallow = { ...original }; // 浅拷贝
shallow.a = 99; // 只改自己,不影响 original
shallow.b.c = 999; // 仍影响 original.b.c —— 引用未断开
如果非要结合 Object.create 做点类似的事?
极少数场景下,你可以先浅拷贝,再用 Object.create 设置原型(比如模拟某种委托模式),但这属于组合用法,不是 Object.create 本身的功能:
const data = { x: 1, y: [10] };
const copy = { ...data }; // 浅拷贝出自有属性
const instance = Object.assign(Object.create(prototype), copy); // 自身有属性 + 指定原型
但这时起拷贝作用的是 {...data} 或 Object.assign,不是 Object.create。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











