给定对象:

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框架的解决方案是否可行?


当前回答

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

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。

其他回答

声明一下,现在也可以用

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

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

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

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

这应该可以工作,在这里进行了测试。

var secondObject = {
    firstObject: JSON.parse(JSON.stringify(firstObject)),
    key3 : 'value3',
    key4 : 'value4'
};

注意:这不会复制firstObject的方法 注2:在旧的浏览器中使用,你需要一个json解析器 注3:通过引用赋值是一个可行的选项,特别是当firstObject包含方法时。相应地调整给定的jsfiddle示例

改进kingPuppy的想法和OP的想法(浅拷贝)-我只在OP的“例子”上加了3点:)

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

var firstObject = { Key1: 'value1', Key2: 'value2' }; var secondObject = { firstObject, Key3: 'value3', Key4: 'value4' }; console.log (secondObject);

for(var k in firstObject) secondObject[k]=firstObject[k];