代码改变世界

深度克隆

2018-01-07 21:50  那些年111  阅读(196)  评论(0)    收藏  举报

概念:

浅度克隆:原始类型为值传递,对象类型仍为引用传递。

深度克隆:所有元素或属性均完全复制,与原对象完全脱离,也就是说所有对于新对象的修改都不会反映到原对象中;

区别:浅度克隆,是不完全克隆,改变现有属性,原来的数组或对象也会改变,深度克隆,不会影响原来的对象或数组;

function deepClone(obj){
var result={},oClass=isClass(obj);
if(oClass==="Object"){
result={};
}else if(oClass==="Array"){
result=[];
}else{
return obj;
}
for(key in obj){
var copy=obj[key];
if(isClass(copy)=="Object"||"Array"){
result[key]=arguments.callee(copy);
}else{
result[key]=obj[key];
}
}
return result;
}
function isClass(o){
if(o===null) return "Null";
if(o===undefined) return "Undefined";
return Object.prototype.toString.call(o).slice(8,-1);
}
//克隆一个数组
var arr=["a","b","c",{name:"22"}];
// var arr={name:"www",age:22}
var oNew=deepClone(arr);
var oNew=arr

console.log(oNew);