js实现对象完美克隆
我们知道,在js中,当object作为参数传递到函数中进行处理后,实际上是修改了传入的对象本身(或者说是对象的引用),但很多时候我们并不希望函数去修改我们的这些对象参数,这就需要使用到对象的克隆,我们应该对该对象做一个克隆,然后操作这个克隆的对象,这样就不会影响我们的原对象了。
不过在js中并没有对象克隆功能,因此需要我们自己实现,实现方法也不复杂其实,基本上是做一些属性复制,我在网上找了一些,但有些实现并不好,如对于array对象克隆后就成json对象了,并没有保留原来的数组方式。不过最后还是找到了一个很好的克隆函数,完美实现了js对象的克隆功能,不论是Array对象或者是普通的Object,都可以很好的进行克隆,这个函数使用constructor(函数构造器)进行复制。
具体代码如下:
var objClone;
if (this.constructor == Object){
objClone = new this.constructor();
}else{
objClone = new this.constructor(this.valueOf());
}
for(var key in this){
if ( objClone[key] != this[key] ){
if ( typeof(this[key]) == 'object' ){
objClone[key] = this[key].Clone();
}else{
objClone[key] = this[key];
}
}
}
objClone.toString = this.toString;
objClone.valueOf = this.valueOf;
return objClone;
}
js实现对象完美克隆相关推荐
- JS篇之数组、对象的克隆
1. 数组的克隆 一. 普通一维数组深克隆let arr = [1,2,3](1) for循环遍历数组pushlet arr1 = []for( let i of arr ){arr1.push(i) ...
- Javascript中的对象拷贝(对象复制/克隆)
Javascript中的对象拷贝(对象复制/克隆) 李俊才 CSDN:jcLee95 邮箱:291148484@163.com 1. 对象的引用 要说"拷贝"还要先说"引 ...
- JS:对象的浅克隆、深克隆
JS中对象的深浅克隆 一.对象的浅克隆 1.浅克隆:只克隆对象的"表层",如果对象的某些属性值又是引用类型值,则不进一步克隆它们,只是传递它们的引用 2.使用for-in-循环即可 ...
- js原型对象的深拷贝
第一次写博客有什么问题可以互相讨论哈 我们都知道在js中对象的传值是地址传值,而我们在拷贝对象的时候需要注意的是如果对象中的属性值是对象,那么我们的思路应该是这样子的: 1.第一步,因为对象中的属性也 ...
- js空对象undefined
<!DOCTYPE html> <html><head><meta charset="UTF-8"><title>js空 ...
- js空对象undefined测试
代码示例: <!DOCTYPE html> <html><head><meta charset="UTF-8"><title& ...
- Node.js 全局对象
Node.js 全局对象 在浏览器 JavaScript 中,通常 window 是全局对象, 而 Node.js 中的全局对象是 global,所有全局变量(除了 global 本身以外)都是 gl ...
- 分支结构||分支循环结构||使用原生js遍历对象
分支循环结构 分支结构 v-show的原理:控制元素样式是否显示 display:none <!DOCTYPE html> <html lang="en"> ...
- 对象的内置属性和js的对象之父Object()
js中对象有constructor,valueOf(),toString()等内置属性和方法; 创建一个空对象的方法: var o = {}; 或者 var o= new Object(); o.co ...
最新文章
- ASP.NETCore学习记录(一)
- 设计模式(十五):Iterator迭代器模式 -- 行为型模式
- AI赌神超进化:德扑六人局击溃世界冠军,诈唬如神,每小时能赢1千刀 | Science...
- ansible自动化部署(一)
- 交换机端口故障问题解决方法
- 简单 局部 整体光照模型计算机图形学,计算机图形学北大光照模型.ppt
- PTA12、 统计文字中的单词数量并按出现次数排序 (10 分)
- 服务器与HTML客户端通信,服务器与HTML客户端通信
- 中国顶级AI盛会,10月魔都等你来解密!
- 书单 | 读了这10本书,再也不怕黑客攻击了
- 自动化测试 短信验证登录
- C语言中更改用户名,如何更改C:User/Administrator这个文件夹的名字
- illegal instruction问题窥探
- 10015---JavaScript--表单验证
- 6种继承的优点和缺点
- 沙特罚金减免期从2022年6月1日到11月30日-跨境知道
- 安卓逆向系列教程 4.2 分析锁机软件
- USB 的UVC协议分析
- xp系统网上邻居看不到局域网电脑_网上邻居看不到局域网的其它计算机名
- HDU 2370 Convert Kilometers to Miles