object.create实现原型式继承克隆,核心是复用原型链而不复制实例状态;新对象[[prototype]]指向指定原型,自身为空,方法通过原型链访问,实例属性需手动设置,天然隔离引用类型,支持属性描述符精确控制特性。

用 Object.create 实现原型式继承下的对象克隆,核心是“复用原型链,不复制实例状态”,它比深拷贝轻量、比 new 构造更灵活,特别适合只继承行为、不关心初始化逻辑的场景。
克隆的本质:只继承原型,不执行构造函数
Object.create(proto) 创建的新对象,其 [[Prototype]] 直接指向 proto,自身为空。这意味着:
- 所有方法(如
sayHello、eat)都通过原型链访问,无需重复定义; - 原对象上的实例属性(如
name = 'Alice')不会自动落到新对象上——这是优势,避免意外共享; - 若原对象方法依赖
this.name等自有属性,需手动在新对象上设置,比如clone.name = 'Bob'。
一步完成克隆:语法简洁明确
假设有一个行为定义清晰的原型对象:
const animal = { type: 'unknown', eat() { console.log(`${this.name} eats as a ${this.type}`); } };只需一行即可克隆出新对象并设置自有属性:
const dog = Object.create(animal);dog.name = 'Buddy';
dog.type = 'dog';
dog.eat(); // "Buddy eats as a dog"
不需要写构造函数、不涉及 new、不污染全局,语义干净。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
避免浅拷贝陷阱:引用属性天然隔离
如果直接用展开运算符或 Object.assign 克隆,数组、对象等引用类型会被共享。而 Object.create 天然规避这个问题:
const clone = Object.create(base);
clone.tags.push('c'); // 只影响 clone.tags
console.log(base.tags); // ['a', 'b'] —— 未被修改
因为 clone 自身没有 tags 属性,push 操作会先在 clone 上创建自己的 tags(隐式赋值),原对象不受影响。
配合属性描述符,克隆时同步定义特性
第二个参数可精确控制新对象自有属性的行为:
const parent = { version: '1.0' };const child = Object.create(parent, {
id: { value: 123, writable: false, enumerable: true },
createdAt: { value: Date.now(), writable: false, configurable: false }
});
这样克隆出来的对象,不仅继承了 parent 的行为,还自带不可写的 id 和防删的 createdAt,适合构建配置对象或只读实例。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










