對(duì)于問題:
var obj1 = {name:'小明'};
var obj2 = obj1;
obj2.name = "小紅";
// obj1.name = ???
console.log(obj1.name);// 小紅
想讓obj1的名字不改變的方法。
1.實(shí)現(xiàn)方法最簡(jiǎn)單的方法
var obj1 = {name:'小明'}
var obj2 = JSON.parse(JSON.stringfy(obj1));
優(yōu)點(diǎn):簡(jiǎn)單方便快捷
缺點(diǎn):會(huì)導(dǎo)致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), //系列化對(duì)象
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