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.
相关产品推荐
相关产品推荐

