Object.assign() 方法用于将全部可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 而且源对象也会被修改。函数
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };spa
const returnedTarget = Object.assign(target, source);翻译
console.log(target);
// expected output: Object { a: 1, b: 4, c: 5 }code
console.log(returnedTarget);
// expected output: Object { a: 1, b: 4, c: 5 }对象
若是目标对象中的属性具备相同的键,则属性将被源对象中的属性覆盖。后面的源对象的属性将相似地覆盖前面的源对象的属性。支持多个对象合并,若是不想修改目标对象,能够将目标对象改为空 {},ip
例如:const returnedTarget = Object.assign( {} , source,source);原型链
Object.assign
方法只会拷贝源对象自身的而且可枚举的属性到目标对象。该方法使用源对象的[[Get]]
和目标对象的[[Set]]
,因此它会调用相关 getter 和 setter。所以,它分配属性,而不单单是复制或定义新的属性。若是合并源包含getter,这可能使其不适合将新属性合并到原型中。为了将属性定义(包括其可枚举性)复制到原型,应使用Object.getOwnPropertyDescriptor()
和Object.defineProperty()
。作用域
String
类型和 Symbol
类型的属性都会被拷贝。get
在出现错误的状况下,例如,若是属性不可写,会引起TypeError
,若是在引起错误以前添加了任何属性,则能够更改target
对象。原型
注意,Object.assign
不会在那些source
对象值为 null
或 undefined
的时候抛出错误。
这种就稍微麻烦一点了
var obj1={name:'张三'}; var obj2={age:18}; for(var key in obj2){ if(obj2.hasOwnProperty(key)===true){ obj1[key]=obj2[key]; } } console.log(obj1);