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