js 浅拷贝、深拷贝实现梳理

浅拷贝

1. Object.create(Object.getPrototypeOf(prev), Object.getOwnPropertyDescriptors(prev)) (最完美)

2. Object.assign({}, prev) (无法拷贝enumerable=false的属性;无法拷贝原型链)

3. 使用for in遍历prev,对新对象进行赋值(无法拷贝enumerable=false的属性;可以遍历原型链,但原型链结构不再存在且自身和原型链相同的属性只会保留一个)

4. 使用Object.keys、values、entries遍历prev,对新对象进行赋值(无法拷贝enumerable=false的属性;无法拷贝原型链);

    使用Object.getOwnPropertyNames遍历prev,对新对象进行赋值(可以拷贝enumerable=false的属性;无法拷贝原型链)

5. 借助工具库,如lodash、underscore、jquery等(_.clone...)

深拷贝

1. 递归逐层浅拷贝

2. JSON.parse(JSON.stringify(obj))

猜你喜欢

转载自blog.csdn.net/qq_33576343/article/details/85765192