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}