//浅克隆
function simpleClone(startObj,endObject){
var obj=endObject||{}
for(var i in startObj){
obj[i]=startObj[i]
}
return obj
}
//深克隆1
function deepClone(startObj,endObject){
var obj=endObject||{}
for(var i in startObj){
if(typeof startObj[i] === 'object'){ //[] {}
obj[i]=startObj[i].constructor===Array?[]:Object.create(null)
deepClone(startObj[i],obj[i])
}else{
obj[i]=startObj[i]
}
}
return obj
}
//深克隆2
function deepClone(obj){
// 定义一个变量 并判断是数组还是对象
var cloneObj = Array.isArray(obj)?[]:Object.create(null)
if(obj && typeof obj == 'object' && obj !=null){
// 判断obj存在并且是对象类型的时候 因为null也是object类型,所以要单独做判断
for(var key in obj){
// 判断obj中是否存在key属性
if(obj.hasOwnProperty(key)){
cloneObj[key] = deepClone(obj[key]);
}
cloneObj[key] = obj[key];
}
}
return cloneObj
}
//深克隆3
function deepClone(origin){
var toStr = Object.prototype.toString
var tar = toStr.call(origin) === '[object Object]' ? {} : []
for(var key in origin){
if(origin.hasOwnProperty(key)){
if(typeof(origin[key]) === 'object' && origin[key] !== null){
tar[key] = deepClone(origin[key])
}else{
tar[key] = origin[key]
}
}
}
return tar
}
js浅克隆和深克隆对象
于 2022-04-23 15:01:23 首次发布