ES6 如何将属性从一个对象复制到另一个对象
可以通过不同的方法将一个对象的属性复制到另一个对象中。以下是其中一些方法。
Object.assign(): 通过使用Object.assign()方法,将一个或多个源对象的所有可枚举属性复制到目标对象中。此方法返回修改后的目标对象。如果目标对象的属性与源对象的属性具有相同的键,则会将其覆盖。后面的源对象会覆盖前面的源对象的属性。Object.assign()只会将一个对象的可枚举和自有属性复制到另一个对象中。因此,它会调用源对象和目标对象的getter和setter。因此,它会分配属性而不是复制或定义新属性。合并的源对象可能包含getter,因此不适合将新属性合并到原型中。
语法:
Object.assign(target, ...sources)
示例:
JavaScript
<script>
let obj1 = { a: 1, b: 2 };
let obj2 = { a: 3, c: 4 };
let obj3 = { b: 5, d: 6 };
// Target object itself is changed.
let targetobj1 = Object.assign(obj1, obj2);
// Here the obj1 and targetobj1 both are same
console.log(obj1);
console.log(targetobj1);
// Passing multiple objects and copy
// to the target obj
let targetobj2 = Object.assign(obj1, obj2, obj3);
console.log(obj1);
console.log(targetobj2);
</script>
输出:
{
a: 3,
b: 2,
c: 4
}
{
a: 3,
b: 2,
c: 4
}
{
a: 3,
b: 5,
c: 4,
d: 6
}
{
a: 3,
b: 5,
c: 4,
d: 6
}
使用****传播运算符****: 数组表达式或字符串可以使用扩展语法(…)来展开没有参数或多个参数(用于函数调用)或元素(用于数组字面量),或者对象表达式可以在没有或多个键值对(用于对象字面量)的情况下进行展开。
JavaScript
<script>
let obj1 = { a: 1, b: 2 };
let obj2 = { a: 3, c: 4 };
let obj3 = { b: 5, d: 6 };
// (...) is syntax of spread operator
let targetobj = { ...obj1, ...obj2, ...obj3 };
console.log(targetobj);
</script>
输出:
{
a: 3,
b: 5,
c: 4,
d: 6
}
通过使用for循环: 必须对源对象(即obj2)的属性进行迭代,并将属性与值分配给目标对象obj1。但是,如果我们只使用一个for循环,这种方法仅限于两个对象。
JavaScript
<script>
let obj1 = { a: 1, b: 2 };
let obj2 = { a: 3, c: 4 };
for (let key in obj2) {
obj1[key] = obj2[key];
}
console.log(obj1);
</script>
输出:
{
a: 3,
b: 2,
c: 4
}