对于问题:
var obj1 = {name:'小明'};
var obj2 = obj1;
obj2.name = "小红";
// obj1.name = ??
console.log(obj1.name);// 小红
想让obj1的名字不改变的方法。
1.实现方法最简单的方法
var obj1 = {name:'小明'}
var obj2 = JSON.parse(JSON.stringfy(obj1));
优点:简单方便快捷
缺点:会导致obj1里面的function消失。
2.使用递归的方法遍历属性,重新赋值
var cloneObj = function(obj){
var str, newobj = obj.constructor === Array ? [] : {};
if(typeof obj !== 'object'){
return;
} else if(window.JSON){
str = JSON.stringify(obj), //系列化对象
newobj = JSON.parse(str); //还原
} else {
for(var i in obj){
newobj[i] = typeof obj[i] === 'object' ?
cloneObj(obj[i]) : obj[i];
}
}
return newobj;
};
3.使用jquery的$.extend()
jQuery.extend(true,{a:{a:"a"}},{a:{b:"b"}}); // 深拷贝true