// 浅度克隆
function clone(o, t) {
t = t || {};
for (var k in o) {
t[k] = o[k];
}
return t;
}
// 深度克隆
function deepClone(o, t) {
t = t || {};
for (var k in o) {
if (o.hasOwnProperty(k)) { // 排除原型链的非自定义属性
if (o[k] !== null && typeof(o[k]) == 'object') {
// if (Object.prototype.toString.call(o[k]) == '[object Array]') {
// t[k] = [];
// } else {
// t[k] = {};
// }
t[k] = Object.prototype.toString.call(o[k]) == '[object Array]' ? [] : {} ;
deepClone(o[k], t[k]);
} else {
t[k] = o[k];
}
}
}
return t;
}
// 要克隆的对象
var a = {
bb : 'bbv',
cc : [4,5,6],
dd : {
eee : 'eeev',
fff : [
7,
{
gggg : 'ggggv'
},
9
]
}
}
// 测试
var b = clone(a);
b.cc[0] = 3; // 4 -> 3
console.log(b.cc[0]); // 3
console.log(a.cc[0]); // 3 // 引用值a.cc跟着变
var c = deepClone(a);
c.cc[1] = 3; // 5 -> 3
console.log(c.cc[1]); // 3
console.log(a.cc[1]); // 5 // 独立于原对象
js 深度克隆_练习
最新推荐文章于 2023-01-05 18:45:14 发布