ES6 對象的擴展 Object.assign()
阿新 • • 發佈:2018-01-30
擴展 const eof npr clas object 多個 合並 對象 1.用於對象的合並,將源對象(source)的所有可枚舉屬性,復制到目標對象(target)
Object.assign方法的第一個參數是目標對象,後面的參數都是源對象。
const target = { a: 1 }; const source1 = { b: 2 }; const source2 = { c: 3 }; Object.assign(target, source1, source2); console.log(target) //{a: 1, b: 2, c: 3}2.如果目標對象與源對象有同名屬性,或多個源對象有同名屬性,則後面的屬性會覆蓋前面的屬性。
const target = { a: 1, b: 1 }; const source13.Object.assign方法實行的是淺拷貝,而不是深拷貝。也就是說,如果源對象某個屬性的值是對象,那麽目標對象拷貝得到的是這個對象的引用。= { b: 2, c: 2 }; const source2 = { c: 3 }; Object.assign(target, source1, source2); console.log(target) //{a: 1, b: 2, c: 3} //Object.assign數組處理 var obj = Object.assign([1, 2, 3], [4, 5]); console.log(obj); //[4, 5, 3] //由於數組當做對象來處理所以值出現覆蓋
const obj1 = {a: {b: 1}}; const obj24.Object.assign方法只能進行值的復制,如果要復制的值是一個取值函數,那麽將求值後再復制。= Object.assign({}, obj1); obj1.a.b = 2; console.log(obj2); //{a:{b:2}}
const source = { get test() { return 1 } }; const target = {}; Object.assign(target, source) console.log(target); //{test: 1}5.常見用途 (1)為對象添加屬性或方法或合並多個對象或為屬性指定默認值
var default_var = { test:0 }(2)克隆對象var obj = {b:1} var test = Object.assign(obj,default_var,{ test:"1", func1:function(){ console.log(1) }, func2:function(){ console.log(1) } }) console.log(test)
function clone(origin) { let originProto = Object.getPrototypeOf(origin); return Object.assign(Object.create(originProto), origin); }6.Object.assign方法參數相關
const obj = {a: 1}; Object.assign(obj) === obj // true typeof Object.assign(2) // "object" Object.assign(undefined) // 報錯 Object.assign(null) // 報錯 let obj = {a: 1}; Object.assign(obj, undefined) === obj // true undefined會被忽略 Object.assign(obj, null) === obj // true undefined會被忽略 const v1 = ‘abc‘; const v2 = true; const v3 = 10; const obj = Object.assign({}, v1, v2, v3); console.log(obj); // { "0": "a", "1": "b", "2": "c" }
ES6 對象的擴展 Object.assign()