判断是否是原始值 使用方法:typeof()/object javascript
判断是数组仍是对象 使用方法: instanceof toString constructorjava
创建相应的数组或对象数组
循环递归bash
function deepClone(origin,target){
var target = target || {},
toStr = Object.prototype.toString,
arr = "[object Array]";
for(var prop in origin){
if(origin.hasOwnProperty(prop)){ //选择本身的属性
if(origin[prop] !== 'null' && typeof(origin[prop]) == 'object'){//区分原始值和引用值
if(toStr.call(origin[prop]) == arr){//区分数组和对象
target[prop] = [];//创建数组
}else{
target[prop] = {};//创建对象
}
deepClone(origin[prop],target[prop]); //循环递归
}else{
target[prop] = origin[prop];
}
}
}
return target;
}复制代码
target[prop] = (toStr.call(origin[prop]) == arr) ? [] : {};
ui
function deepClone(origin,target){
var target = target || {},//容错
toStr = Object.prototype.toString,//.call
arr = "[object Array]";//数组原型
for(var prop in origin){
if(origin.hasOwnProperty(prop)){//判断是不是本身的属性
if(origin[prop] !== 'null' && typeof(origin[prop]) == 'object'){//判断引用值仍是原始值
target[prop] = (toStr.call(origin[prop]) == arr) ? [] : {};//判断是数组仍是对象 而后相应创建数组/对象
deepClone(origin[prop], target[prop]);//循环递归
}else{//原始值
target[prop] = origin[prop];
}
}
}
return target;
}复制代码
var obj1 = {
name : 'sunny',
age : 100,
sayName : function(){
console.log(this.name);
}
}
var obj2 = {};复制代码
执行拷贝this
deepClone(obj1, obj2);//放入源对象和拷贝对象复制代码