Object.assign()
方法用於將所有可枚舉屬性的值從一個或多個源對象復制到目標對象。它將返回目標對象。
語法
Object.assign(target, ...sources);
參數
- target: 目標對象
- sources 源對象
返回值
- 目標對象
示例
<script> let form = {name: 'liming', sex: '男'}; let obj = {class: '一班', age: 15}; console.log('before', form); Object.assign(form, obj); console.log('after', form); </script>
描述
如果目標對象中的屬性具有相同的鍵,則屬性將被源中的屬性覆蓋。后來的源的屬性將類似地覆蓋早先的屬性。
在出現錯誤的情況下,例如,如果屬性不可寫,會引發
注意,
Object.assign
方法只會拷貝源對象自身的並且可枚舉的屬性到目標對象。該方法使用源對象的
[[Get]]
和目標對象的
[[Set]]
,所以它會調用相關 getter 和 setter。因此,它分配屬性,而不僅僅是復制或定義新的屬性。如果合並源包含getter,這可能使其不適合將新屬性合並到原型中。為了將屬性定義(包括其可枚舉性)復制到原型,應使用
Object.getOwnPropertyDescriptor()
和
Object.defineProperty()
。
String
類型和
Symbol
類型的屬性都會被拷貝。
在出現錯誤的情況下,例如,如果屬性不可寫,會引發
TypeError
,如果在引發錯誤之前添加了任何屬性,則可以更改
target
對象。
注意,
Object.assign
不會跳過那些值為 [
null
] 或 [
undefined
]的源對象。