如何使用原生 Javascript 代码深度克隆一个对象(注意区分对象类型)
对于深度克隆,我的理解是:在克隆或扩展一个对象时,当该对象是一个包括子对象的对象,也会遍历该子对象的属性并进行复制拷贝。所以深度克隆适用于对象的属性也是对象的情况。
贴出js代码:
/**
* 深度扩展对象--适用于对象的属性也是对象的情况
* @param {Object}
* @return {Object}
*/
var deepextend = function (destination, source) {
for (var property in source) {
var copy = source[property]; // 获取source属性值
if (destination === copy) {
continue;
}
// 如果copy是一个对象,则递归调用(并传入copy参数),直到copy不是一个对象为止
if (typeof copy === 'object') {//$.isObj(copy)
destination[property] = arguments.callee(destination[property] || {}, copy); //递归调用
// 否则直接把copy赋值给destination对象的属性(此时与$.extend方法等价)
} else {
destination[property] = copy;
}
}
return destination;
};