es6 javascript对象方法Object.assign()

阅读数:71 评论数:0

跳转到新版页面

分类

html/css/js

正文

一、基本用法

Object.assign方法用于对象的合并,将源对象的所有可枚举属性复制目标对象。

var target = { a: 1 };
var source1 = { b: 2 };
var source2 = { c: 3 };
Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}

如果多个源对象有同名属性,则后面的属性会覆盖前面的属性。

Object.assign拷贝的属性是有限制的,只拷贝源对象的自身属性(不拷贝继承属性),也不拷贝不可枚举属性。

二、浅拷贝

Object.assign方法实行的是浅拷贝,也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。

var obj1 = {a: {b: 1}};
var obj2 = Object.assign({}, obj1);
obj1.a.b = 2;
obj2.a.b // 2

源对象obj1的a属性的值是一个对象,Object.assign拷贝得到的是这个对象的引用。这个对象的任何变化,都会反映到目标对象上面。

三、常见用途

1、为对象添加属性

class Point {
	constructor(x, y) {
		Object.assign(this, {x, y});
	}
}

2、为对象添加方法

Object.assign(SomeClass.prototype, {
	someMethod(arg1, arg2) {
	···
	},
	anotherMethod() {
	···
	}
});
//  等同于下面的写法
SomeClass.prototype.someMethod = function (arg1, arg2) {
···
};
SomeClass.prototype.anotherMethod = function () {
···
};

3、克隆对象

function clone(origin) {
	return Object.assign({}, origin);
}

4、合并多个对象

const merge =(...sources) => Object.assign({}, ...sources);

5、为属性指定默认值

const DEFAULTS = {
	logLevel: 0,
	outputFormat: 'html'
};
function processContent(options) {
	let options = Object.assign({}, DEFAULTS, options);
}



相关推荐

一、script标签属性 async 表示立即下载该脚本,但不妨碍页面中的其他操作,只对外部文件有效。 charset 与src属性一起使用,告诉浏览器用来编码这个javascript程序的

ECMAscript 5添加了第二种运行模式:严格模式(strict mode)。 //针对单个脚本 <script>   "use strict";   console.log("这是严格模式

因为map的key可以为任何类型, 包括对象. 但是JSON语法, key只能为string. 所以不能直接对JSON.stringify(Map). 1.但是可以先把map转换为

Javascript中, !表示运算符"非", 如果变量不是布尔类型, 会将变量自动转化为布尔类型

一、使用let声明变量 1、与使用var声明变量的区别 (1)变量不能重复说明 (2)不存在变量提升(在执行function函数之前,所有变量都会被提升至函数作用域顶部) (3)存在块级作用域(不允许

一、概述 THREE.Object3D 是 Three.js 的基础类,用于表示 3D 空间中的一个对象。几乎所有的 3D 对象(如 Mesh、Group、Camera、Light 等)都继承自 TH

一、forEach 如果不做特殊处理,一般情况下,不会break的。如果需要中途跳出循环,建议直接用for语句。 let arr = [1,2,3,4,5]; arr.forEach((item,in

一、window对象 在javascript中,一个浏览器窗口就是一个window对象,window对象以及这些子对象,由于都是用于操作浏览器窗口,所以我们又称为BOM(Browser Object

Math.random()方法会返回介于0(包含)~1(不包含)之间的一个随机数。 舍掉小数点后的数值的方法有很多,如parseInt(),Math.ceil(),Math.flo

一、async 将不是Promise对象的返回值封装,如果有返回值返回为resolved的Promise,如果没有返回值,则返回rejected的Promise。 1、异步函数的返回值 (1)如果是普