基于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?