深度克隆对象

2017-08-01  本文已影响23人  sdcV
克隆的概念

在看一个深克隆

//深度克隆
function deepClone(obj) {
    var result, oClass = isClass(obj);

    if (oClass === 'Object') { //初始化result类型
        result = {};
    } else if (oClass === 'Array') {
        result = [];
    } else {
        return obj;
    }

    for (key in obj) {
        var copy = obj[key];
        if (isClass(copy) == 'Object') {
            result[key] = arguments.callee(copy);////递归调用
        } else if (isClass(copy) == 'Array') {
            result[key] = arguments.callee(copy);
        } else {
            result[key] = obj[key];
        }
    }
    return result;
}

function isClass(o) {//判断传入的类型
    if (o === null) return 'Null';
    if (o === undefined) return 'Undefined';
    return Object.prototype.toString.call(o).slice(8, -1);
}

var Person = {
    name: "jack",
    age: "18",
    Address: {
        province: "beijing"
    },
};
var New = deepClone(Person);
New.name = "tom";
New.Address.province = "shanghai";
console.log(Person.name); //jack
console.log(Person.Address.province); //beijing
console.log(New.name); //tom
console.log(New.Address.province); //shanghai
上一篇 下一篇

猜你喜欢

热点阅读