26

既存の属性を持つ既存のオブジェクトに複数の属性を追加したいと考えています。新しい属性ごとに 1 行よりも簡潔な方法はありますか?

myObject.name = 'don';
myObject.gender = 'male';

MDN のすべては、ブラケット表記で新しいオブジェクトを実行する方法を示していますが、既存のオブジェクトは示していません: https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects

4

6 に答える 6

8

2 つの JavaScript オブジェクトのプロパティを動的にマージするにはどうすればよいですか?から

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" }

注: 必要に応じて、柔軟なマージ競合戦略を実装できます。

于 2013-05-07T19:50:47.350 に答える
6

時々私はこのようにします:

var props = {
   name : 'don',
   gender : 'male',
   age : 12,
   other : false
};
for(var p in props) myObject[p] = props[p];
于 2013-05-07T19:50:53.677 に答える
5

jQuery ライブラリを使用する

jQuery.extend(myObject, { name : 'don', gender : 'male' });
于 2013-05-07T19:50:00.813 に答える
3

ECMAscript 5 では、 definePropertiesを使用できます。

Object.defineProperties(myobject, {  
  name: {  
    value: 'don' 
  },  
  gender: {  
    value: 'male' 
  }  
});
于 2013-05-07T19:53:35.513 に答える