JavaScript深度克隆
所有元素或属性均完全复制,与原对象完全脱离,也就是说所有对于新对象的修改都不会反映到原对象中。
- 遍历对象
- 判断是不是原始值
- 判断是数组还是对象
- 建立相应的数组对象
- 递归
原始数据类型
Number
String
Boolean
null
undefined
引用数据类型
array
function
object
深度克隆代码
function Clon(origin, target) {
var target = target || {},
toStr = Object.prototype.toString,
arrStr = "[object Array]";
for(var prop in origin) {
if(origin.hasOwnProperty(prop)) {
if(origin[prop] !== "null" && typeof(origin[prop]) == 'object') {
// if(toStr.call(origin[prop]) == arrStr) {
// Traget[prop] = [];
// }else {
// Traget[prop] = {};
// }
target[prop] = toStr.call(origin[prop]) == arrStr ? [] : {}
Clon(origin[prop], target[prop]);
}else {
target[prop] = origin[prop];
}
}
}
return target;
}