Pour la copie d’objets en javascript, l’affectation classique ne suffit pas.
Pour copier un objet et en faire un objet à part entière, il est nécessaire de faire appel à l’opérateur new qui affectera un nouvel espace mémoire à cet objet qui lui assurera son indépendance.
Exemple de copie d’objet en javascript:
function Arbre(txtNom, txtPlantation){ this.nom= txtNom; this.plantation= txtPlantation; this.print= showArbre; } function showArbre(){ document.write('< br />Arbre: '+this.nom+' - Plantation: '+this.plantation); } var arbrePomme = new Arbre('pommier','verger'); var arbrePommeCopie = new Arbre(arbrePomme.nom, arbrePomme.plantation); arbrePomme.print(); arbrePommeCopie.print(); arbrePommeCopie.nom = 'bananier'; arbrePomme.print(); arbrePommeCopie.print();
On constate bien que la modification de la valeur de la prorpiété nom de l’objet copié n’a aucune influence sur celle de l’objet d’origine. Les 2 objets sont donc indépendants, la copie d’objets est réussie.
Afin d’éviter de lister toutes les propriétés d’un objet à chaque copie, il est possible de créer un fonction qui s’occupera de cette opération:
function Arbre(txtNom, txtPlantation){ this.nom= txtNom; this.plantation= txtPlantation; this.print= showArbre; this.copyObject= copieArbre; } function showArbre(){ document.write('< br />Arbre: '+this.nom+' - Plantation: '+this.plantation); } function copieArbre(objCopie){ objCopie.nom= this.nom; objCopie.plantation= this.plantation; } var arbrePomme = new Arbre('pommier','verger'); var arbrePommeCopie = new Arbre(); arbrePomme.copyObject(arbrePommeCopie); arbrePomme.print(); arbrePommeCopie.print(); arbrePommeCopie.nom = 'bananier'; arbrePomme.print(); arbrePommeCopie.print();