You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript:如何按引用生成含A、B属性的对象且不修改原A?

解决方案

可以实现,利用原型链就能满足需求,不用函数或getter。核心思路是让对象C的原型指向A,同时把B的属性直接挂载到C自身,这样既不会修改原对象A,又能让C同步A的属性变化。

代码示例

const A = { d: 1, e: 2 };
const B = { f: 10, g: 20 };
// 创建以A为原型的空对象,再把B的属性合并到这个对象上
const C = Object.assign(Object.create(A), B);

// 测试修改A的属性
A.d = 10;

console.log(C); // 打印 { f: 10, g: 20 }(原型上的A属性不会被直接打印,但可正常访问)
console.log(C.d); // 10,同步了A的修改
console.log(A); // { d: 10, e: 2 },完全保留原结构,未被添加B的属性

原理说明

  • Object.create(A) 创建了一个空对象,该对象的原型链指向A,因此访问C的d、e属性时,会自动从A上读取;修改A的属性后,C的对应属性也会同步更新。
  • Object.assign(..., B) 把B的属性直接添加到C的自身属性中,不会对A产生任何影响。
  • 原对象A始终保持初始结构,不会被添加B的任何属性。

如果需要让console.log(C)直接显示所有属性(包括原型链上的A属性),可以用console.log({...C, ...A})或手动遍历原型链,但核心的属性同步、不修改A的需求已经完全满足。

内容的提问来源于stack exchange,提问作者Adam B.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 20:02:36