对象的深拷贝

JS中对象的拷贝分为属性拷贝和原型链拷贝。
先来说说仅仅拷贝属性。
1const obj = {a: 1, b: 1}
2const clone_obj = {...obj} // 方式一
3const clone2 = Object.assign({}, obj) // 方式二
Copy
但是这种方式并不能拷贝原型链。
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
以上两种方法可以拷贝全部内容。

向对象中添加属性

1class Point {
2  constructor (x, y) {
3    Object.assign(this, {x, y})
4  }
5}
Copy
上面方法是在 class 中操作的。 如果是在原有的对象中添加属性可以用打点的形式,但是如果添加的键值对很多就会显得不够优雅。
可以用 Object.assign() 新建一个合并后的新对象进行操作。

亲亲留个评论再走呗

正在加载评论区...