Rumah >hujung hadapan web >tutorial js >js深拷贝实例探讨

js深拷贝实例探讨

小云云
小云云asal
2018-03-06 14:15:431469semak imbas

深度拷贝就是把父对象拷贝到子对象上,而且两者的内存和以后的操作都互不影响的拷贝,本文主要和大家分享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浅拷贝与深拷贝的区别

Atas ialah kandungan terperinci js深拷贝实例探讨. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn