如何在JavaScript中将多个对象作为主对象属性高效添加
批量将子对象挂载到主对象的高效实现方式
如果你不想逐个手动赋值MasterObj.obj1 = obj1,可以用以下几种高效方法实现批量挂载,同时保留主对象原有的属性和方法:
方法1:遍历子对象集合挂载
先将所有需要挂载的子对象整理到一个集合中,再通过循环批量赋值:
// 主对象 const MasterObj = { property1: '主对象属性', method1: () => console.log('调用主对象方法') }; // 子对象变量 const obj1 = { obj1Prop: '子对象1属性', obj1Method: () => console.log('调用子对象1方法') }; const obj2 = { obj2Prop: '子对象2属性', obj2Method: () => console.log('调用子对象2方法') }; // 整理子对象集合(键名就是要挂载到主对象上的属性名) const subObjects = { obj1, obj2 }; // 批量挂载 for (const key in subObjects) { // 仅挂载自身属性,避免原型链属性 if (subObjects.hasOwnProperty(key)) { MasterObj[key] = subObjects[key]; } } // 测试调用 MasterObj.obj1.obj1Method(); // 输出:调用子对象1方法 MasterObj.method1(); // 输出:调用主对象方法
方法2:使用Object.assign直接合并
Object.assign可以一次性将多个对象的属性合并到目标对象上,非常适合这个场景:
// 沿用上面的MasterObj、obj1、obj2定义 const subObjects = { obj1, obj2 }; // 批量合并到主对象 Object.assign(MasterObj, subObjects);
注意:如果子对象集合中的键名和主对象原有属性名重复,子对象的属性会覆盖主对象的对应属性,使用前需确认键名无冲突。
方法3:展开运算符创建新对象(不修改原主对象)
如果不想修改原MasterObj,而是生成一个包含主对象和所有子对象的新对象,可以用ES6展开运算符:
const newMasterObj = { ...MasterObj, obj1, obj2 };
这种方式不会改变原MasterObj,新对象包含所有原有属性和子对象。
内容的提问来源于stack exchange,提问作者user3952846
相关产品推荐
相关产品推荐

