//浅复制:实现基本类型的复制没有问题,但是复制的是引用类型的话,则修改child将会修改parent function extend(parent,child){ var child = child || {}, i; for(i in parent){ if(parent.hasOwnProperty(i)){ child[i] = parent[i]; } } return child; } //深复制:实现基本类型和引用类型的复制,即修改child的引用类型也不会修改parent的引用类型 function extendDeep(parent,child){ var i, toStr = Object.prototype.toString, aStr = "[object Array]", child = child || {}; for(i in parent){ if (parent.hasOwnProperty(i)) { if (typeof parent[i] === ‘object‘) { child[i] = (toStr.call(parent[i]) === aStr)?[]:{}; extendDeep(parent[i],child[i]); } else{ child[i] = parent[i]; } } } return child; } var parent = { aa:{a:123,b:678} } var child = extendDeep(parent); console.dir(child); child.aa.b = 10086; console.table(child); console.table(parent);
时间: 2024-10-08 17:45:02