对象的深拷贝是我们在开发中经常遇到的一个问题,今天小编就来给大家介绍一下自己的解决思路
1.递归的方式来进行复制
//定义一个稍微复杂的对象
var obj = {
name: [{
name: 'lisi'
},{
name: 'zhang',
age: [{
name: 'liu'
}]
}],
age: '90'
}
function deepClone(obj) {
//定义一个变量来存储结果
var result;
//判断传递的类型
if(obj === null || typeof obj !== 'object') return obj;
//处理日期对象
if(obj instanceof Date){
result = new Date();
result.setTime(obj.getTime());
return result;
}
//处理数组
if(obj instanceof Array) {
result = [];
for(var i = 0; i < obj.length; i++){
result[i] = arguments.call(obj[i])
}
return result;
}
//处理对象
if(obj instanceof Object) {
result = {};
for(var key in obj) {
if(obj.hasOwnProperty(key) result[key] = arguments.callee(obj[key])
}
return result;
}
}
2.使用ES5中提供的新的API
var obj = {
name: [{
name: 'lisi'
},{
name: 'zhang',
age: [{
name: 'liu'
}]
}],
age: '90'
}
function deepClone(obj) {
//定义一个变量来存储结果
var result;
//判断传递的类型
if(obj === null || typeof obj !== 'object') return obj;
//处理日期对象
if(obj instanceof Date){
result = new Date();
result.setTime(obj.getTime());
return result;
}
if(typeof obj === 'object') {
result = JSON.parse(JSON.stringify(obj);
return result;
}
}
如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h63357.shtml