深拷貝的原生js實現

<html>
<head>
    <title></title>
</head>
<body>
<script type="text/javascript">
function copy(arr){
    var obj=arr.constructor==Array?[]:{};
  //第二種方法 var obj=arr instanceof Array?[]:{}
    for(var item in arr){
        if(typeof arr[item]==="object"){
            obj[item]=copy(arr[item]);
        }else{
            obj[item]=arr[item];
        }
    }
    return obj;
}
var obj={a:1,b:2,c:{d:1,e:[3,4,5]}}
var newobj=copy(obj);
obj.c.e.push(7);
console.log(obj);
console.log(newobj);
</script>
</body>
</html>

複製代碼

上面代碼中有測試輸出原對象和深拷貝到newobj上的新對象,如果深拷貝成功的話,obj裏面的引用類型改變值,是不會影響到新對象的。以下是在控制檯打印的結果:

果然obj和newobj的引用類型互相沒有影響,而不像淺拷貝那樣引用類型共享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章