首頁  >  文章  >  web前端  >  js深拷貝實例探討

js深拷貝實例探討

小云云
小云云原創
2018-03-06 14:15:431418瀏覽

深度拷貝就是把父物件拷貝到子物件上,而且兩者的記憶體和以後的操作都互不影響的拷貝,本文主要和大家分享js深拷貝實例探討,希望能幫助到大家。

(1)方法1

function copy(obj1,obj2){
  var obj2=obj2||{}; 
  for(var name in obj1){    if(typeof obj1[name] === "object"){ //先判断一下obj[name]是不是一个对象
      obj2[name]= (obj1[name].constructor===Array)?[]:{}; 
      copy(obj1[name],obj2[name]); //然后来无限递归
    }else{
      obj2[name]=obj1[name];  //如果不是对象,直接赋值。
    }
  }  return obj2; 
}

使用方法:

var obj1 = {
    se:[{a:1,b:2},{c:3}],
    sa:{a:"g"},
    sc:function(){console.log(1)}
}var n_obj = copy(obj1,{})
console.log(n_obj)

(2)方法2

function d_clone(obj) {
    return Object.getPrototypeOf(Object.create(obj));
}

使用方法:

var obj1 = {
    se:[{a:1,b:2},{c:3}],
    sa:{a:"g"},
    sc:function(){console.log(1)}
}var n2_obj = d_clone(obj1);
console.log(n2_obj)

(3)方法3

JSON.parse(JSON.stringify(obj)

說明:obj的屬性中不能含有函數。

(1)方法1

function copy(obj1,obj2){
  var obj2=obj2||{}; 
  for(var name in obj1){    if(typeof obj1[name] === "object"){ //先判断一下obj[name]是不是一个对象
      obj2[name]= (obj1[name].constructor===Array)?[]:{}; 
      copy(obj1[name],obj2[name]); //然后来无限递归
    }else{
      obj2[name]=obj1[name];  //如果不是对象,直接赋值。
    }
  }  return obj2; 
}

使用方法:

var obj1 = {
    se:[{a:1,b:2},{c:3}],
    sa:{a:"g"},
    sc:function(){console.log(1)}
}var n_obj = copy(obj1,{})
console.log(n_obj)

(2)方法2

function d_clone(obj) {
    return Object.getPrototypeOf(Object.create(obj));
}

使用方法:

var obj1 = {
    se:[{a:1,b:2},{c:3}],
    sa:{a:"g"},
    sc:function(){console.log(1)}
}var n2_obj = d_clone(obj1);
console.log(n2_obj)

(3)方法3

JSON.parse(JSON.stringify(obj)

說明:obj的屬性中不能含有函數。

相關推薦:

相關推薦:

深入理解JavaScript深拷貝效能

什麼是js深拷貝和淺拷貝及其實作方式

JavaScript淺拷貝與深拷貝的差異

以上是js深拷貝實例探討的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn