JS 中的一些技巧

2021-12-28 11:43:54 浏览数 (2)

对象的深拷贝

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() 新建一个合并后的新对象进行操作。

0 人点赞