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 :

Comment casser la référence entre objets ?


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 155
    Points : 75
    Points
    75
    Par défaut Comment casser la référence entre objets ?
    Bonjour à tous (et bonnes fêtes)

    J'ai raté quelque chose d'ultra basique sur le mécanisme des objets en javascript


    Pour un projet d'appli j'ai un objet 'parameters' qui stocke 2 objets : les paramètres de base (par défaut) et les paramètres courants (respectivement 'parameters.def' et 'parameters.curent').
    Quand un paramètre est modifié par l'utilisateur, le nouveau est stocké dans parameters.curent, mais le truc c'est que je dois conserver les paramètres de base pour pouvoir les comparer avec les paramètres courants.

    Et une copie classique de parameters.def copie en référence ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    parameters.def = {
    	file: 0,
    	...
    }
    // Copie vers parameters.curent (init)
    parameters.curent = {};
    for( var s in parameters.def ){
    	if ( parameters.def.hasOwnProperty(s) ){
    		parameters.curent[s] = parameters.def[s];
    	}
    }
    Par la suite si j'affecte une nouvelle valeur à (par exemple) parameters.curent.file elle est répercutée dans parameters.def.file, d'où mon problème.

    Comment fait on pour empêcher ça ?
    Merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Je ne vois pas comment les modifs sur parameters.current se répercutent sur parameters.def, j'ai essayé ton code et je n'ai pas le problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var parameters = {};
    parameters.def ={ file: 0}
    // Copie vers parameters.curent (init)
    parameters.curent = {};
    for( var s in parameters.def ){ 
       if ( parameters.def.hasOwnProperty(s) )    {     
       parameters.curent[s] = parameters.def[s];    
      }
    }
     
    parameters.curent.file++;
    console.log(parameters.curent.file); // = 1
    console.log(parameters.def.file); // = 0

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 155
    Points : 75
    Points
    75
    Par défaut
    Je ne vois pas comment les modifs sur parameters.current se répercutent sur parameters.def
    Moi non plus je voyais pas et il me semblait bien qu'un truc clochait ...

    En fait tout va bien, la copie de l'objet ne copie pas ses éléments en référence : c'est une autre partie du code qui modifiait parameters.def, en l'occurrence j'avais mal compris la mise en œuvre de dat.gui

    Au temps pour moi et merci pour ta réponse.

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

Discussions similaires

  1. Références entre Objets générés
    Par DaveShot dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 25/08/2009, 09h36
  2. Association entre objet Id ou référence ?
    Par grosFab dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 19/04/2007, 13h41
  3. Réponses: 17
    Dernier message: 24/11/2006, 18h25
  4. Réponses: 6
    Dernier message: 09/08/2006, 22h35

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