2015-05-28 3 views
16

Ich wollte etwas sehr unkompliziertes tun mit Object.assign.ES5 Object.assign equivalent

var firstObj = {name : "Saba H.", rollNo : 1}; 
var secondObj = {college : "WCE"}; 
var wholeObj = Object.assign(firstObj, secondObj); 

console.log(wholeObj); // {name : "Saba H.", rollNo : 1, college : "WCE"} 

Als Object.assign ist Teil ECMAScript6 Harmonie Vorschlag und nicht in vielen Browsern unterstützt, ist es möglich, mit ES5 zu tun? Wenn nicht, gibt es irgendeine Mikrobibliothek?

+2

https://lodash.com/docs#assign basiert auf dem gleichen - basierend auf dem bearbeiten, werfen Sie einen Blick auf die lodash Quellcode warum nicht? –

+2

in [mdn] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) können Sie Polyfill sehen – Grundy

Antwort

21

In Underscore.js Sie wie verwenden können,

_.extend(firstObj, secondObj); 

In jQuery, können Sie verwenden,

$.extend({},firstObj,secondObj); 

In reinen JavaScipt können Sie n Anzahl der Objekte zusammenführen, indem Sie diese Funktion verwenden:

function mergeObjects() { 
    var resObj = {}; 
    for(var i=0; i < arguments.length; i += 1) { 
     var obj = arguments[i], 
      keys = Object.keys(obj); 
     for(var j=0; j < keys.length; j += 1) { 
      resObj[keys[j]] = obj[keys[j]]; 
     } 
    } 
    return resObj; 
} 
0

Ich fand eine funktionierende Polyfill für Object.assign on.210 (genial, danke!):

if (typeof Object.assign != 'function') { 
    // Must be writable: true, enumerable: false, configurable: true 
    Object.defineProperty(Object, "assign", { 
    value: function assign(target, varArgs) { // .length of function is 2 
     'use strict'; 
     if (target == null) { // TypeError if undefined or null 
     throw new TypeError('Cannot convert undefined or null to object'); 
     } 

     var to = Object(target); 

     for (var index = 1; index < arguments.length; index++) { 
     var nextSource = arguments[index]; 

     if (nextSource != null) { // Skip over if undefined or null 
      for (var nextKey in nextSource) { 
      // Avoid bugs when hasOwnProperty is shadowed 
      if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { 
       to[nextKey] = nextSource[nextKey]; 
      } 
      } 
     } 
     } 
     return to; 
    }, 
    writable: true, 
    configurable: true 
    }); 
}