我想将多个属性添加到具有现有属性的现有对象。有没有比每个新属性一行更简洁的方法?
myObject.name = 'don';
myObject.gender = 'male';
MDN 上的所有内容都展示了如何使用括号表示法创建新对象,而不是现有对象:https ://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects
我想将多个属性添加到具有现有属性的现有对象。有没有比每个新属性一行更简洁的方法?
myObject.name = 'don';
myObject.gender = 'male';
MDN 上的所有内容都展示了如何使用括号表示法创建新对象,而不是现有对象:https ://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects
在 ES6/ES2015 中你可以使用 Object.assign 方法
let obj = {key1: true};
console.log('old obj: ', obj);
let newObj = {key2: false, key3: false};
Object.assign(obj, newObj);
console.log('modified obj: ', obj);
我不确定这是否有帮助,但是使用 JS ES6 传播语法有一个技巧:
let obj = {a: 1, b: 2};
obj = {...obj, b: 3, c: 4};
console.log(obj); // {a: 1, b: 3, c: 4}
您可以尝试以某种方式使用它...通常,这是使用 js 解构方法添加或覆盖对象属性的单个衬里。
编辑:请注意,...obj
在新对象中的放置是至关重要的,因为将其放置在第一位将允许使用以下参数(b: 3, c: 4
在我的示例中)覆盖它,并且将其放置在最后将优先考虑已经在对象中的成员。
var obj2 = {name: 'don', gender: 'male'};
for (var attrname in myobject) { myobject[attrname] = obj2[attrname]; }
编辑
要更清楚地了解如何扩展 Object 以使用此功能:
//Extend the protype so you can make calls on the instance
Object.prototype.merge = function(obj2) {
for (var attrname in obj2) {
this[attrname] = obj2[attrname];
}
//Returning this is optional and certainly up to your implementation.
//It allows for nice method chaining.
return this;
};
//Append to the object constructor function so you can only make static calls
Object.merge2 = function(obj1, obj2) {
for (var attrname in obj2) {
obj1[attrname] = obj2[attrname];
}
//Returning obj1 is optional and certainly up to your implementation
return obj1;
};
用法:
var myObject1 = { One: "One" };
myObject1.merge({ Two: "Two" }).merge({ Three: "Three" });
//myObject1 is { One: "One", Two: "Two", Three: "Three", merge: function }
var myObject2 = Object.merge2({ One: "One" }, { Two: "Two" });
Object.merge2(myObject2, { Three: "Three" });
//myObject2 is { One: "One", Two: "Two", Three: "Three" }
注意:您当然可以根据需要实施灵活的合并冲突策略。
有时我会这样做:
var props = {
name : 'don',
gender : 'male',
age : 12,
other : false
};
for(var p in props) myObject[p] = props[p];
使用 jQuery 库
jQuery.extend(myObject, { name : 'don', gender : 'male' });
在 ECMAscript 5 中,您可以使用defineProperties:
Object.defineProperties(myobject, {
name: {
value: 'don'
},
gender: {
value: 'male'
}
});