一般来讲深复制主要是为了复制js对象中的引用类型,引用类型在普通的赋值操作下相当于是引用,修改复制对象也会影响原对象,简单的方法的话可以使用JSON.parse(JSON.stringify(obj)) 来实现深复制
然而这是没有考虑对象中有函数的情况,用var b = JSON.parse(JSON.stringify(a)) 这种方法的深复制没法复制对象里面的函数,而且属性的顺序也可能会出错。
这里记录一下用递归深复制可以复制函数的办法
function isArray(o){
return .prototype.toString.call(o)=='[ Array]';
}
function deepCopy(obj){
var newObj ;
if(isArray(obj)){
newObj = [] ;
}else if(typeof obj==" "){
newObj = {} ;
}else if(typeof obj=="function"){
return eval(obj.toString())
}else{
return obj ;
}
for(var key in obj){
newObj[key] = arguments.callee(obj[key]) ;
}
return newObj ;
}
其实函数的复制可以用eval(fun.otStrng())这样,加上对对象的判别,就完成里一个obj中有函数或者引用类型的复制。
注:es6中其实已经有isArray这个函数了,用法是Array.isArray(yourArr),返回一个bool值
继续阅读与本文标签相同的文章
上一篇 :
Golang如何交叉编译各个平台的二进制文件详解
下一篇 :
干货 | 通透理解Elasticsearch聚合
-
Alibaba Arthas 3.1.2版本:增加logger/heapdump/vmoption命令,支持tunnel server
2026-05-18栏目: 教程
-
进击的Java - 云原生进化
2026-05-18栏目: 教程
-
云服务OpenAPI设计的7大挑战
2026-05-18栏目: 教程
-
MySQL 之 LEFT JOIN 避坑指南
2026-05-18栏目: 教程
-
容器服务及相关云环境几次故障和问题排查记录
2026-05-18栏目: 教程
