Object.assign的用法
阿新 • • 發佈:2018-12-06
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);
}