应用场景
var obj1 = { a: 1, b: 2 };
var obj2 = obj1;
console.log(obj2); // { a: 1, b: 2 }
obj1.a = 5;
console.log(obj2); // { a: 5, b: 2 }
obj2.b = 8;
console.log(obj1); // { a: 5, b: 8 }
Why?
js中对象属于引用类型,var obj2 = obj1; 相当于把obj1原对象的地址赋值给了obj2,此时obj1和obj2指向了同一个地址,无论是修改obj1,还是修改obj2,其实修改的都是同一个地址。
那么问题来了,假如我不想让他们相互影响呢?
function cloneObj(obj) {
var o;
if (typeof obj === 'object') {
if (obj === null) {
o = null;
} else {
if (obj instanceof Array) {
o = [];
for (var i = 0, len = obj.length; i < len; i++) {
o.push(cloneObj(obj[i]));
}
} else {
o = {};
for (var j in obj) {
o[j] = cloneObj(obj[j]);
}
}
}
} else {
o = obj;
}
return o;
};
有了这个方法,我们再来看一下一开始的例子:
var obj1 = { a: 1, b: 2 };
var obj2 = cloneObj(obj1);
console.log(obj2); // { a: 1, b: 2 }
obj1.a = 5;
console.log(obj2); // { a: 1, b: 2 }
obj2.b = 8;
console.log(obj1); // { a: 5, b: 2 }
537

被折叠的 条评论
为什么被折叠?



