Javascript 向现有js对象添加多个属性
我想向具有现有属性的现有对象添加多个属性。每个新属性是否有比一行更简洁的方法Javascript 向现有js对象添加多个属性,javascript,oop,object,Javascript,Oop,Object,我想向具有现有属性的现有对象添加多个属性。每个新属性是否有比一行更简洁的方法 myObject.name = 'don'; myObject.gender = 'male'; MDN上的所有内容都显示了如何使用括号表示法创建新对象,而不是现有对象:使用jQuery库 jQuery.extend(myObject, { name : 'don', gender : 'male' }); 从 编辑 为了更清楚地了解如何扩展Object以使用此函数: //Extend the protype so
myObject.name = 'don';
myObject.gender = 'male';
MDN上的所有内容都显示了如何使用括号表示法创建新对象,而不是现有对象:使用jQuery库
jQuery.extend(myObject, { name : 'don', gender : 'male' });
从
编辑
为了更清楚地了解如何扩展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];
在ECMAscript 5中,您可以让我们了解:
在ES6/ES2015中,可以使用Object.assign方法
let obj={key1:true};
console.log('old obj:',obj);
设newObj={key2:false,key3:false};
Object.assign(obj,newObj);
log('modified obj:',obj)代码>我不确定这是否有用,但使用JS ES6 spread语法有一个技巧:
let obj = {a: 1, b: 2};
obj = {...obj, b: 3, c: 4};
console.log(obj); // {a: 1, b: 3, c: 4}
你可以试着用这个。。。通常,这是一个使用js destructuring方法添加或覆盖对象属性的单一线性程序
编辑:
请注意,…obj
在新对象中的位置是粗略的,因为首先放置它将允许使用以下参数覆盖它(b:3,c:4
,在我的示例中),将其放在最后将优先考虑对象中已经存在的成员。您可以创建一个函数,接收您的对象和具有新属性/值的对象,并枚举新对象,更新旧对象。那会更简洁一点<代码>更新(obj,{name:“don”,gender:“male”})
很遗憾不能使用jQuery。(非常不幸的是)虽然这看起来非常干净…但这个问题没有标记。不幸的是,语法非常冗长,比OP希望简化的原始语法还要长。是的,我想你是对的,当你想防止对象的变异时,这有更多的用途。呵呵,我总是这么做=我同意。这是一个不错的功能,只是笨重。还值得检查ECMAScript v5浏览器的兼容性,具体取决于您的目标受众——在本例中,IE9以下没有任何内容。回答不错,但这是一个黑客攻击,ES6/ES2015有一个更好的选项,如下所述。您可以通过声明您的示例使用JavaScript ES6扩展语法来改进您的答案。
Object.defineProperties(myobject, {
name: {
value: 'don'
},
gender: {
value: 'male'
}
});
let obj = {a: 1, b: 2};
obj = {...obj, b: 3, c: 4};
console.log(obj); // {a: 1, b: 3, c: 4}