1. 程式人生 > >Object.assign的用法

Object.assign的用法

Object.assign()方法用於將源物件的所有可列舉屬性複製帶目標物件
Object.assign方法的第一個引數是目標引數,後面的引數是源物件

var target={a:1};
var source1={b:2};
var source2=[c:3};
Object.assign(target,source1,source2);
console.log(target);//{a: 1, b: 2, c: 3}
//如果目標物件與源物件有同名屬性,或多個源物件有同名屬性,則後面的屬性會覆蓋前面的屬性
var target={a:1,b:1};
var source1={b:2,
c:2}; var source2=[c:3}; Object.assign(target,source1,source2); console.log(target);//{a: 1, b: 2, c: 3} //如果目標引數無法轉化成物件,就會報錯 Object.assign(indefined);//報錯 Object.assign(null);//報錯 //如果非物件引數出現在源物件的位置(非首引數),這些引數都會轉換成物件。如果無法轉換物件便會跳過。 let obj={a:1}; Object.assign(obj,undefined)===obj//true Object.assign(obj,null)===
obj//true //其他型別的值不在首引數也不會報錯。但是,除了字串會以陣列的形式複製到目標物件,其他值都不會產生效果。 let v1=true; let v2='abc'; let v3=10; let obj=Object.assign({}, v1, v2 ,v3); console.log(obj);//{0: "a", 1: "b", 2: "c"} //屬性名為Symbol值的屬性也會被Object.assign賦值 Object.assign({a: 'b'}, { [Symbol('c')]:'d'}); //{a: "b", Symbol(c): "d"}

常見用途:

//1.為物件新增屬性
class Point{ constructor{ Object.assign(this,{x,y}); } } //2.為物件新增方法 Object.assign(SomeClass.prototype,{ someMethod(arg1,arg2); ... }) //3.克隆物件 function(origin){ return Object.assign({}, origin); } //4.合併多個物件 const merge=(targe,...sources)=>Object.assign(target,...sources); //為屬性指定預設值 const DEFAULTS={ logLevel:0, outputFormat:'html' }; function processContent(options){ options=Object.assign({}, DEFAULTS,options); console.log(options); }