给定对象:

var firstObject = {
    key1 : 'value1',
    key2 : 'value2'
};

我如何复制属性在另一个对象(secondObject)像这样:

var secondObject = {
    key1 : 'value1',
    key2 : 'value2',
    key3 : 'value3',
    key4 : 'value4'
};

使用对firstObject的引用?就像这样:

var secondObject = {
    firstObject,
    key3 : 'value3',
    key4 : 'value4'
};

(这行不通……我把它放在大行中只是为了显示我想如何组织代码)。

不使用任何JavaScript框架的解决方案是否可行?


当前回答

不幸的是,您不能像这样在对象中放置对变量的引用。但是,您可以创建一个函数,将对象的值复制到另一个对象。

function extend( obj1, obj2 ) {
    for ( var i in obj2 ) {
        obj1[i] = obj2[i];
    }
    return obj1;
}

var firstObject = {
    key1: "value1",
    key2: "value2"
};

var secondObject = extend({
    key3: "value3",
    key4: "value4"
}, firstObject );

其他回答

从@ bardzuievny的回答中得到启发,ES6提供了一个本地解决方案:Object.assign()函数!

用法很简单:

Object.assign(secondObject, firstObject);

就是这样!

目前的支持显然很差;只有Firefox(34+)可以开箱即用,而Chrome(45+)和Opera(32+)需要设置“实验性标志”。

支持正在改进,最新版本的Chrome、Firefox、Opera、Safari和Edge都支持它(显然IE不支持)。转译器也可用,如Babel和Traceur。请看这里了解更多细节。

根据ES6 -扩展语法:

你可以简单地使用:

const thirdObject = {
   ...firstObject,
   ...secondObject   
}

这避免了通过引用传递这些对象的问题。

此外,它还负责具有深度嵌套的对象。

如果您只想获取第二个对象中存在的属性,则可以使用object。键要获取第一个对象的属性,可以做两个方法:

A.) map使用副作用将第一个对象的属性分配给第二个对象:

var a = {a:100, b:9000, c:300};
var b = {b:-1};

Object.keys(a).map(function(key, index) {
    if (typeof b[key] !== 'undefined') {
        console.log(key);
        b[key] = a[key];    
    }
});

B.)或reduce来创建一个新对象并将其分配给第二个对象。注意,这个方法替换了第二个对象之前不匹配第一个对象的其他属性:

var a = {a:100, b:9000, c:300};
var b = {b:-1, d:-1}; // d will be gone

b = Object.keys(a).reduce(function(result, current) {
    if (typeof b[current] !== 'undefined') {
        result[current] = a[current];   
    }
    return result;
}, {});
var firstObject = {
     key1: "value1",
     key2: "value2"
};

var secondObject = {
     key3: "value3",
     key4: "value4"
     copy: function(firstObject){
           this.key1 = firstObject.key1;
           this.key2 = firstObject.key2;
     }
 };

使用以下方法将复制属性

secondObject.copy(firstObject)

我对javascript很陌生,但发现这个工作。我想时间有点长了,但很管用。

遍历第一个对象的属性并将它们赋值给第二个对象,如下所示:

var firstObject = {
    key1 : 'value1',
    key2 : 'value2'
};

var secondObject = {
    key3 : 'value3',
    key4 : 'value4'
};

for (var prop in firstObject) {
    if (firstObject.hasOwnProperty(prop)) {
        secondObject[prop] = firstObject[prop];
    }
}

for-in循环是不够的;你需要hasOwnProperty。有关原因的详细解释,请参阅http://bonsaiden.github.com/JavaScript-Garden/#object.forinloop。