SOURCE

// 1. 浅克隆
// var obj = {
//     name: 'nihao',
//     age: 18,
//     sex: 'male'
// }
// var obj1 = {}

// function clone (origin, target) {
//     var target = target || {};
//     for(prop in origin) {
//         target[prop] = origin[prop] 
//     }
//     return target
// }

// console.log(clone(obj, obj1));

// 2.深克隆

var obj = {
    name: 'nihao',
    age: 18,
    sex: 'male',
    card: ['aaa', 'bbb'],
    shabi: {
        name: 'abc',
        youbing: {
            name: 'cde'
        }
    }

}

// 步骤:
// 1. 判断是不是原始值
// 2. 判断类型谁不是引用值(数组或者对象)
// 3. 建立相应的数组或者对象
// 4. 递归
var obj1 = {}

function deepClone(origin, target){
    var target = target || {},
        toStr = Object.prototype.toString,
        arrStr = "[object Array]";
    for (var prop in origin) {
        if (origin.hasOwnProperty(prop)) {
            if (typeof(origin[prop]) == "object" && origin[prop] != null) {
                if (toStr.call(origin[prop]) == arrStr) {
                    target[prop] = [];
                } else {
                    target[prop] = {};
                }
                deepClone(origin[prop], target[prop]);
            } else {
                target[prop] = origin[prop];
            }
        }
    }
    return target;
}

deepClone(obj, obj1);

console 命令行工具 X clear

                    
>
console