欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
对象的深拷贝是我们在开发中经常遇到的一个问题,今天小编就来给大家介绍一下自己的解决思路
 
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