浅拷贝
var obj = {
name : 'zhou',
sex : 'male',
age : 18,
}
var obj1 = {
}
//浅拷贝
function clone (Target, Orgin) {
for(var props in Orgin){
Target[props] = Orgin[props]
}
console.log(Target)
}
clone(obj1,obj);
深拷贝
// 思路:1.循环遍历 for-in(遍历对象,返回的是key)
// 2,判断对象属性的数据类型是否未非原始值。
// 原始值:number,string,Boolean,null,undefined。引用值:Object,Array(key为0,1,2的特殊对象)
// 3,若为引用值再判断是数组还是对象。 判断方法:typeof ,instanceof toString constructer
// 4,新建对应的数组或对象
// 5, 递归
var obj = {
name : 'zhou',
sex : 'female',
age : 18,
identify : ['adb', 123, true],
husband : {
name : 'tang',
daughter : {
name : 'guo',
by : null
}
},
by: null,
}
var obj1 = {
}
function deepClone (Target, Origin) {
var Target = Target || {}
var toStr = Object.prototype.toString
for ( var prop in Origin) {
if(Origin.hasOwnProperty(prop)){
if(Origin[prop] !== null && typeof(Origin[prop]) == 'object'){
Target[prop] = (toStr.call(Origin[prop]) == [object Array]) ? [] : {}
deepClone(Target[prop], Origin[prop])
} else {
Target[prop] = Origin[prop]
}
}
}
}
deepClone(obj1,obj);
console.log(obj1);
网友评论