javaScript基础(12):(深度克隆)

116 阅读1分钟

打好基础,查漏补缺

基础是重中之重

深度克隆

写了个深度克隆的方法(只考虑引用类只有数组和对象两种)
var obj = {
    name: 'To',
    age: 24,
    sex: 'male',
    cars: ['BMW', 'audi'],
    girlfriend: {
    	name: 'shanshan',
    	age: 24,
    	gender: 'female'
    }
}
var obj1 = {}

function clone(origin, target) {
    var temp = target || {}
    if (typeof (origin) != 'object' && origin =='null') { // 如果是原始值或者null的话
    	temp = origin
    } else {
    	for (var k in origin) {
    		if (origin.hasOwnProperty(k)) { // 不复制原型链上的属性
    			if (Object.prototype.toString.call(origin[k]).indexOf('Array') >= 0) { // 如果是数组
    				temp[k] = []
    			} else { // 对象
    				temp[k] = {}
    			}
    			arguments.callee(origin[k], temp[k]) // 如果这行 temp[k] = clone(origin[k], temp[k]) 那么生效
    		}
    	}
    }
    return temp
}