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

猜你喜欢

转载自blog.csdn.net/qq_41805715/article/details/84726479