js自定义函数,实现对象的深拷贝
时间: 2024-06-15 08:08:00 浏览: 16
在JavaScript中,可以使用自定义函数来实现对象的深拷贝。深拷贝是指创建一个新的对象,该对象与原始对象具有相同的值,但是是完全独立的,对其中一个对象的修改不会影响到另一个对象。
以下是一个示例代码,展示了如何使用自定义函数实现对象的深拷贝:
```javascript
function deepCopy(obj) {
if (typeof obj !== 'object' || obj === null) {
return obj;
}
let copy = Array.isArray(obj) ? [] : {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
copy[key] = deepCopy(obj[key]);
}
}
return copy;
}
```
这个函数接受一个参数 `obj`,它可以是任意类型的对象。如果 `obj` 不是对象或者为 `null`,则直接返回 `obj`。否则,创建一个新的空对象 `copy`,然后遍历 `obj` 的属性,并递归调用 `deepCopy` 函数来复制每个属性的值到 `copy` 对象中。
使用这个自定义函数可以实现对象的深拷贝,例如:
```javascript
let obj1 = { name: 'Alice', age: 20, hobbies: ['reading', 'painting'] };
let obj2 = deepCopy(obj1);
obj2.name = 'Bob';
obj2.hobbies.push('coding');
console.log(obj1); // { name: 'Alice', age: 20, hobbies: ['reading', 'painting'] }
console.log(obj2); // { name: 'Bob', age: 20, hobbies: ['reading', 'painting', 'coding'] }
```
在上面的示例中,`obj1` 和 `obj2` 是两个完全独立的对象,对其中一个对象的修改不会影响到另一个对象。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)