for in 对象复制继承
浅拷贝
for(var attr in Parent){ children[attr] = Parent[attr]; } function extend(obj1,obj2){ for(var attr in obj2){ obj1[attr] = obj2[attr]; } } extend(children,Parent);
深拷贝
var obj = { a:{b:10} } function deepCopy(obj){ if(typeof obj != 'object'){ //console.trace(); return obj; } var newObj = {}; for(var attr in obj){ newObj[attr] = arguments.callee(obj[attr]); } return newObj; } var obj2 = deepCopy(obj); obj2.a.b=20; alert(obj.a.b)
写法2——渡一
浅克隆
var obj = { name:'abc', age:123, sex:'female' } var obj1 = {} function clone(origin,target){ var target = target || {}; for(var prop in origin){ target[prop] = origin[prop]; } return target; } clone(obj,obj1)
深克隆
/*deepcopy*/ var obj = { name : 'abc', age : 19, card : ['visa','master'], wife : { name : 'bcd', son : { name : 'aaa' } } } function deepCopy(origin,target){ var target = target || {}, toStr = Object.prototype.toString(), arrStr = "[Object Array]"; for(var prop in origin){ if(origin[prop] != "null" && origin.hasOwnProperty(prop)){ //判断是不是自己对象上的属性 if(typeof(origin[prop]) == 'Object'){ //是不是引用值 target[prop] = toStr.call(origin[prop]) == arrStr ? [] : {}; //判断是[]还是{} deepCopy(origin[prop],target[prop]); //递归继续分解 }else{ target[prop] = origin[prop] } } } return target; } var obj1={} deepCopy(obj,obj1)