对象的深拷贝
JS中对象的拷贝分为属性拷贝和原型链拷贝。
先来说说仅仅拷贝属性。
js
代码语言:javascript复制1const obj = {a: 1, b: 1}
2const clone_obj = {...obj} // 方式一
3const clone2 = Object.assign({}, obj) // 方式二
COPY
但是这种方式并不能拷贝原型链。
js
代码语言:javascript复制1const obj = {a: 1, b: 1}
2obj.__proto__.func = () => {
3 console.log('prototype')
4}
5const clone1 = {__proto__: Object.getPrototypeOf(obj), ...obj}
6// {a: 1, b: 1}
7console.log(clone1.func()) // prototype
8
9const clone2 = Object.assign(
10Object.create(Object.getPrototypeOf(obj)),
11 obj
12)
COPY
以上两种方法可以拷贝全部内容。
向对象中添加属性
js
代码语言:javascript复制1class Point {
2 constructor (x, y) {
3 Object.assign(this, {x, y})
4 }
5}
COPY
上面方法是在 class 中操作的。 如果是在原有的对象中添加属性可以用打点的形式,但是如果添加的键值对很多就会显得不够优雅。
可以用 Object.assign()
新建一个合并后的新对象进行操作。