IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[POO] Dupliquer un objet


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2002
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 22
    Points : 22
    Points
    22
    Par défaut [POO] Dupliquer un objet
    Existe-t-il une méthode simple pour dupliquer un objet, sans en connaître à priori le contenu. /!\ j'ai besoin d'une vrai duplication !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function monObj() {
    this.a = "A";
    this.b = ["x","y","z"];
    }
     
    var m1=new monObj();
    var m2=new monObj();
    m2=m1;
    m2.a="B";
    L'exemple ci-dessus pourrait fonctionner mais la modif sur m2 a également modifié m1; je cherche donc à dupliquer le contenu de m1. /!\ mon objet peut être plus complexe que celui donné en exemple.

    Merci d'avance,

  2. #2
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 643
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    cloneNode ...

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2002
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 22
    Points : 22
    Points
    22
    Par défaut
    Merci mais cette méthode je l'ai déjà testé, cela fonctionne bien au premier niveau, or j'ai bien précisé que mon objet pouvait être plus complexe. Avec cette méthode, la duplication ne fonctionne pas sur le tableau inclus dans l'objet !

  5. #5
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    mwé si c est un node, pas pour un objet autre

  6. #6
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    teste le typeof de ton this[i] et fais un appel recursif

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2002
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 22
    Points : 22
    Points
    22
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      function dupliqueObj(obj1,obj2)
      {
        var o1=obj1;
        var o2=obj2;
     
        for (i in o1)
        {
          if (typeof(o1[i])=="object")
            dupliqueObj(o1[i],o2[i]);
          else
            o2[i]=o1[i];
        }
      }
    Ca marche !! merci ...

  8. #8
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par mch_27
    Merci mais cette méthode je l'ai déjà testé, cela fonctionne bien au premier niveau, or j'ai bien précisé que mon objet pouvait être plus complexe. Avec cette méthode, la duplication ne fonctionne pas sur le tableau inclus dans l'objet !
    Mais si, ça fonctionne très bien, il suffit de mettre le deuxième paramètre de cloneNode à true pour indiquer que tu veux faire un deep copy de ce node...

  9. #9
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    il me semble qu il veut faire une copie d'un objet pas d'un noeud

    du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var machin = function(){
       this.truc = "hello";
       this.sayHello = function(){
            alert(this.truc);
       }
    }
    sinon effectivement cloneNode(true)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [POO] Instancier un objet avec le nom de la classe
    Par shinchun dans le forum Langage
    Réponses: 4
    Dernier message: 08/06/2006, 13h44
  2. Dupliquer un objet
    Par Folken Laëneck dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 24/08/2005, 09h07
  3. [POO] Désactiver un objet dont le nom est passé en parametre
    Par JavaEli dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/07/2005, 08h47
  4. [POO] fonction toUpperCase : Objet attendu
    Par LineLe dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/04/2005, 16h51
  5. [POO] Passer un objet HTML en argument.
    Par defacta dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 17/12/2004, 10h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo