Maison >interface Web >js tutoriel >Discussion sur les exemples de copie profonde js

Discussion sur les exemples de copie profonde js

小云云
小云云original
2018-03-06 14:15:431470parcourir

La copie profonde consiste à copier l'objet parent vers l'objet enfant, et la mémoire et les opérations ultérieures des deux copies ne s'affecteront pas mutuellement. Cet article partage principalement avec vous la discussion sur les exemples de copie profonde js, dans l'espoir d'aider tout le monde. .

(1) Méthode 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; 
}

Comment utiliser :

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) Méthode 2

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

Comment utiliser :

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) Méthode 3

JSON.parse(JSON.stringify(obj)

Explication : Les attributs de obj ne peuvent pas contenir de fonctions.

(1) Méthode 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; 
}

Comment utiliser :

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) Méthode 2

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

Comment utiliser :

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) Méthode 3

JSON.parse(JSON.stringify(obj)

Explication : Les attributs de obj ne peuvent pas contenir de fonctions.

Recommandations associées :

Recommandations associées :

Compréhension approfondie des performances de copie approfondie de JavaScript

Qu'est-ce que js deep copy Et la copie superficielle et sa mise en œuvre

La différence entre la copie superficielle JavaScript et la copie profonde

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn