一、淺拷貝:
拷貝就是複制,就相當于把一個對象中的所有内容,複制一份給另一個對象,直接複制,
或者說,就是把一個對象的位址給了另外一個對象,他們的指向相同,兩個對象之間有相同的屬性或者方法,都可以使用
<script>
var obj1={
age:24,
sex:"男",
name:"Eric"
}
var obj2={};
//定義一個函數,把a對象中的所有屬性複制到對象b中
function extend(a,b){
for(var key in a){
b[key]=a[key];
}
}
extend(obj1,obj2);
console.log(obj2.name);//Eric
console.log(obj2.sex);//男
console.log(obj2.age);//24
</script>
二、深拷貝:
拷貝還是複制,"深"是把一個對象中所有的屬性或者方法,一個一個的複制, 并且在另外一個對象中開辟相應的空間,一個一個的存儲到另外一個對象中
<script>
var obj1={
age:25,
sex:"男",
car:["奧迪","特斯拉","五菱"],
dog:{
name:"小白",
age:6,
color:"黃色"
}
};
var obj2={};
//通過函數,把對象a中的所有資料拷貝到對象b中
function extend(a,b){
for(var key in a){
//先擷取a對象中每個屬性的值
var item=a[key];
//判斷這個值是不是數組
if(item instanceof Array){
//如果是數組,在對象b中添加一個新的屬性,并且這個屬性值也是數組
b[key]=[];
//調用這個方法,把a對象的這個數組的屬性值一個一個的複制到b對象這個數組屬性中
extend(item,b[key]);
}else if(item instanceof Object){//判斷這個值是不是對象類型的
//如果是對象類型的,那麼在b對象中添加一個屬性,也是對象
b[key]={};
//調用這個方法,把a對象中的屬性對象的值.一個一個的複制到b對象的這個屬性對象中
extend(item,b[key]);
}else{
//如果是普通的資料,直接複制到b對象這個屬性中
b[key]=item;
}
}
}
extend(obj1,obj2);
console.dir(obj2);//見下圖
</script>

三、周遊DOM樹:
1、代碼:
<div>
<!-- 周遊DOM樹 -->
<h1></h1>
<p>
<span></span>
<span></span>
</p>
</div>
<ul>
<li>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
</li>
<li></li>
<li></li>
</ul>
<script>
//擷取頁面中的根節點---根标簽
var root=document.documentElement;//html
//根據根節點,調用fn的函數,顯示的是根節點的名字
function forDOM(root1){
//調用f1,顯示的是節點的名字
f1(root1);
//擷取根節點所有的子節點
var children=root1.children;
//調用周遊所有子節點的函數
forChildren(children);
}
//給我子節點,把子節點的所有子節點顯示出來
function forChildren(children){
//周遊所有的子節點
for(var i=0;i<children.length;i++){
//每個子節點
var child=children[i];
//顯示每個子節點的名字
f1(child);
//判斷child下面有沒有子節點,如果有子節點,那麼就繼續周遊
child.children&&forDOM(child);
}
}
function f1(root){
console.log("節點名字:======"+root.nodeName);
}
forDOM(root);
</script>
2、思路
轉載于:https://www.cnblogs.com/EricZLin/p/9083679.html