基于2个其他创建一个对象

可能重复:
我如何动态合并两个JavaScript对象的属性?

我有两个对象a和b定义如下:

a = { 
  a: 1, 
  af: function() { console.log(this.a) }, 
};
b = { 
  b: 2, 
  bf: function() { console.log(this.b) },
};

我现在想要的是创建另一个将获得a和b属性的对象,如下所示:

c = { 
  a: 1, 
  af: function() { console.log(this.a) },
  b: 2, 
  bf: function() { console.log(this.b) },
}

请注意,a和b需要保持不变。

任何想法如何做到这一点?


您可以为a和b做一个for循环,并将所有hasOwn属性复制到一个新对象中。

var c = {};
for (var p in a)
    if(a.hasOwnProperty(p))
         c[p] = a[p];
for (var p in b)
    if(b.hasOwnProperty(p))
         c[p] = b[p];

DEMO


或者,如果你碰巧使用jQuery,你可以这样做:

var c = $.extend({}, a, b);

var desc    = Object.getOwnPropertyDescriptor,
    props   = Object.getOwnPropertyNames,
    define  = Object.defineProperty;

function extend( target ) {
    return {
        with: function( source ) {
            props( source ).forEach(function( key ) {
                define( target, key, desc( source, key ) );
            });
        }
    };
}

所以现在我们可以走了

var c = Object.create( null );

extend( c ).with( a );
extend( c ).with( b );

免责声明:提供的代码假设我们在ES5或ES5 Shimed环境中!


var i, c={};
for (i in a) { if (a.hasOwnProperty(i)) { c[i] = a[i]; } }
for (i in b) { if (b.hasOwnProperty(i)) { c[i] = b[i]; } }

您可以将此功能抽象为您自己的“扩展”功能,类似于jQuery提供的功能:

function extend() {
  var i, j, x, o=(arguments[0] || {});
  for (i=1; i<arguments.length; i++) {
    x = arguments[i];
    for (j in x) { if (x.hasOwnProperty(j)) { o[j] = x[j]; } }
  }
  return o;
}
var c = extend({}, a, b);
链接地址: http://www.djcxy.com/p/27347.html

上一篇: Create an object based on 2 others

下一篇: Concat objects?