深度克隆
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);
浙公网安备 33010602011771号