ES6学习总结(五)

与其说是对象合并,还不如说是JavaScript中对象属性的复制和转移,将多个对象中的属性合并到一个对象中

1
2
3
4
5
6
7
8
var person = {
name : 'John',
age : 24
},
location = {
address : 'Location',
city : 'NewYork'
} ;
如何可以做到将上述两个对象中的属性合并到同一个对象中,介绍ES6的一个新的方法,Object.assign,如下:

1
Object.assign(target, ...sources) // target为目标对象,sources可以是多个源对象

这个方法可以帮助我们拷贝多个源对象中所有可以被枚举的自身属性到目标对象中,如果目标对象中的属性与源对象中的属性相同的话,源对象的属性会覆盖目标对象的属性,需要注意的是,这里面可以拷贝的属性必须是可以被枚举的自身属性,一个是可枚举,一个是自身,两个条件是必须的,这个方法作用的过程中,会先调用源对象的getter方法,然后调用目标对象的setter方法,从而达到拷贝属性到目标对象的目的

1
2
3
Object.assign(person,location); 
/* 现在我们应该可以看到,person对象中会有四个属性
name , age , address, city */

在ES6里面我们使用Obj.assign,我们也可以用ES5来模拟Obj.assign,需要注意拷贝自身的可枚举属性

1
2
3
4
5
6
7
8
9
10
11
function assign(target, source) {
if (typeof target === 'object' && typeof source === 'object') {
for (var key in source) {
if (fromObj.hasOwnProperty(key)) {
target[key] = source[key];
}
}
}else{
throw "Assign function can apply only on object";
}
}