ES5 Object.assign等价物

问题描述 投票:24回答:3

我想用Object.assign做一些非常简单的事情。

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

由于Object.assign是ECMAScript6和声提案的一部分,并且在许多浏览器中都不支持,因此可以使用ES5吗?如果没有,那么有没有微型图书馆?

javascript object ecmascript-5 ecmascript-harmony
3个回答
34
投票

在underscore.js中你可以使用,

_.extend(firstObj, secondObj);

在jQuery中,你可以使用,

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

在纯JavaScript中,您可以使用此函数合并qazxsw poi对象的数量:

n

3
投票

我在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; } 上发现了一个用于Object.assign的聚合填充物(太棒了,谢谢!):

MDN

1
投票

纯粹的javascript方式:

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
  });
}

例:

function mergeObjects(){
    var res = {};
    for(var i = 0;i<arguments.length;i++){
        for(x in arguments[i]){
            res[x] = arguments[i][x];
        };
    };
    return res;
};
© www.soinside.com 2019 - 2024. All rights reserved.