362day(js克隆)
《2018年9月30日》【连续362天】
标题:js克隆;
内容:
// 浅层克隆
var obj ={
name : "abc",
age : 123,
sex : "female"
}
var obj1 ={}
function clone(origin,target){
var target = target || {};
for(var prop in origin) {
target[prop] = origin[prop];
}
return target;
}
clone(obj, obj1);
// 深度克隆
var obj2 = {
name : "abc",
age : 123,
card : ['visa','master'],
wife :{
name : 'bcd',
son :{
name : "aaa"
}
}
}
var obj3 ={}
// 遍历对象
// 1.判断是不是原始值
// 2.判段是数组还是对象
// 3.建立相应的数组或对象
// 递归
function deepClone(origin,target){
var target = target || {};
toStr = Object.prototype.toString;
arrStr ="[object Array]"
for(var prop in origin){
if(origin.hasOwnProperty(prop)){
if(origin[prop] !== "null" && typeof(origin[prop])=='object'){
// if(toStr.call(origin[prop]) == arrStr){
// target[prop] = [];
// }else{
// target[prop] = {};
// }
target[prop] =(toStr.call(origin[prop]) == arrStr) ?[] : {};
deepClone(origin[prop],target[prop]);
}else{
target[prop] = origin[prop];
}
}
}
}