js中对象深度克隆,以及ES6中的深度克隆的实现
简要介绍:js中的对象的赋值,其实是实现了对象的引用,在赋值对象上修改属性会影响到原来的对象。
–ES5中我们可以通过递归函数来实现深层次的克隆。
–ES6中我们可以通过Object.assign的方式来实现深度克隆。
1.javascript(ES5)中对象的克隆
function deepClone(obj){
var newObj= obj instanceof Array?[]:{};
for(var i in obj){
newObj[i]=typeof obj[i]=="object"?
deepClone(obj[i]):obj[i];
}
return newObj;
}
缺点:不能实现包装类型比如通过new String()或者new Number()创建的对象的深度克隆
2.ES6下的对象深度克隆
(1)通过Object.assigin实现
const deepClone=(obj)=>{
var proto=Object.getPrototypeOf(obj);
return Object.assign({},Object.create(proto),obj);
}
通过Object.getPrototypeOf函数得到obj被克隆函数的原型上的属性,然后通过Object.assign实现深度克隆。
(2)通过proto来实现(仅适合浏览器端)
const deepClone=(obj)=>({
__proto__: Object.getPrototypeOf(obj),
...obj
})
通过扩展运算符…和proto属性来实现
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: utf-8占几个字节
- 下一篇: ThinkPHP3.2.3快速入门(创建数据)