ECMAScript 2018标准方法
你会使用对象传播:let merged = {...obj1, ...obj2};/** There's no limit to the number of objects you can merge.
* Later properties overwrite earlier properties with the same name. */const allRules = {...obj1, ...obj2, ...obj3};
ECMAScript 2015(ES6)标准方法/* For the case in question, you would do: */Object.assign(obj1, obj2);/** There's no limit to the number of objects you can merge.
* All objects get merged into the first object.
* Only the object in the first argument is mutated and returned.
* Later properties overwrite earlier properties with the same name. */const allRules = Object.assign({}, obj1, obj2, obj3, etc);
ES5和早期的方法for (var attrname in obj2) { obj1[attrname] = obj2[attrname]; }
请注意,这会简单地添加的所有属性obj2,以obj1这可能不是你想要什么,如果你仍然想使用未修改obj1。
如果你使用的是一个遍布原型的框架,那么你必须得到更好的支票hasOwnProperty,但是这些代码适用于99%的情况。
功能示例:/**
* Overwrites obj1's values with obj2's and adds obj2's if non existent in obj1
* @param obj1
* @param obj2
* @returns obj3 a new object based on obj1 and obj2
*/function merge_options(obj1,obj2){
var obj3 = {};
for (var attrname in obj1) { obj3[attrname] = obj1[attrname]; }
for (var attrname in obj2) { obj3[attrname] = obj2[attrname]; }
return obj3;}