簡單來說
物件的淺拷貝就是一個改變的時候另一個也改變 ,它只拷貝一層物件的屬性
物件的深拷貝就是一個改變的時候另一個不改變,兩個物件對應兩個不同的地址
先寫寫淺拷貝:
var obj1={"name":"gao"};
var obj2 = obj1;
obj1.name ="wang";
console.log("obj1",obj1);
console.log("obj2",obj2);

可以看到obj1和obj2是一樣的 同時更改obj1的時候obj2也是會跟著改變的,因為它們只拷貝了物件的屬性
再寫寫深拷貝:
深拷貝的寫法有很多,最基礎的就是下面這種
var obj3 ={"age":18};
var obj4={};
obj4.age = obj3.age;
obj3.age=99999;
console.log("obj3",obj3)
console.log("obj4",obj4);

這時候就可以看到,在更改obj3的時候,obj4并沒有變化,這就是最簡單的深拷貝,
當然深拷貝還有其他的寫法,比如——遞回的方法
var obj={
"name":"gao",
"age":18,
"list":{
"title":"新聞"
}
}
obj.__proto__.say=function(){};
// 深拷貝函式 -- 創建 新物件 回圈賦值
// 如果屬性值 是物件 創建 新物件 回圈賦值
function deepCopy(obj){
var copyObj={};
for(var key in obj){
if(obj.hasOwnProperty(key) == true ){
if(obj[key] instanceof Object ){
copyObj[key]= deepCopy(obj[key])
}else{
copyObj[key]=obj[key]
}
}
}
return copyObj;
}
var o2= deepCopy(obj)
obj.list.title="娛樂"
console.log(obj);
console.log(o2);
還有轉字串的方法
var obj={
"name":"gao",
"age":18,
"list":{
"title":{
"a":"b"
}
},
"run":function(){
}
}
obj.__proto__.say=function(){};
// JSON.stringify 沒有原型鏈
var obj2 = JSON.parse( JSON.stringify(obj) );
obj.name ="wang";
obj.age ="wang";
obj.list.title.a ="ssss";
console.log(obj);
console.log(obj2);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/249923.html
標籤:其他
上一篇:JavaScript基礎語法
