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 affecter une iteration sur une collection d'objets à un objet unique


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Comment affecter une iteration sur une collection d'objets à un objet unique
    Bonjour,
    Bon le titre est super long,mais je ne sais pas comment définir mieux mon incompréhension en ce qui concerne l'affectation d'objet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    function Planete(options){
      options = options || {};
      this.name=options.name||"";
    //...
    }
    Planete.prototype={
      set:function(jour,lieu){
         if(!jour){jour=Maintenant;}
         if(!lieu){lieu=Ici;}
         //... initialize toutes les propriétés d'une planéte
           switch(this){
             case SysSol.corps.SOLEIL :
                datSol(jour,lieu);
                break;
               //... fonction déterminant les données du soleil
             case SysSol.corps.LUNE :
                datLun(jour,lieu);
                break;
              // ... fonction déterminant les données de la lune
             default :
                datPlan(jour,lieu);
                break;
              // ... pour le reste
           }
           return this;
      }
    }
     
    var SysSol = {
        corps:{
           SOLEIL = new Planete({
               name : 'Soleil',
               o : {val: 1.243,correction : 4.456}
               //...
             },
           LUNE =new Planete({
     
           }
           //...
          }
         constantes:{
           //...
         }
    for(var i in SysSol.corps){SysSol.corps[i].set();}
    Jusque là ça marche. Mais j'ai quand même l'impression de faire des bévues
    Par contre à partir de là je comprend plus ce qui se passe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    function systemeSolaireEvents(lieu,dure){
    	pdat = {}; // positions de tous les objets pour la période
    	var j=0;
    	var jdeb = lieu.date-2;
             var jmax=jdeb+dure;
    	while(jdeb<jdmax){
    	    pdat[j]= {};
    	   for (var i in SysSol.corps) {pdat[j][i] = SysSol.corps[i].set(jd,obs);}
    	j++;
    	jdeb++;
    	}
     
    }
    systemeSolaireEvents(ici,7);
    pdat[j][i] représente, pour toutes les valeurs de j, toujours les mêmes valeurs pour l'objet i qui est d'ailleurs la valeur qu'aurait cet objet à jdeb+8???
    Une âme charitable pourrait-t-elle m'expliquer ce comportement (ou m'indiquer où je pourrais avoir une explication car même si Google est ton ami encore faut-il savoir quelle question poser!) et éventuellement si c'est pas trop abuser une piste pour résoudre ce problème.
    Merci.

  2. #2
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Bonjour,

    Je ne suis pas sur d'avoir tout compris...
    Tu construis pdat tel que j représente une date et i un objet. Ton problème est que pour un objet i donné (ex: SOLEIL), chaque valeurs qui lui est associé en j, tu as les mêmes valeurs qui correspondent à la dernière calculée ?

    Si c'est bien ça, ton problème il faudrait que tu nous indiques ce que renvoie ta fonction set.
    Mais si tu renvoies this (une instance de Planete), pour chaque boucle sur la période, tu vas modifier l'instance unique de la planète, donc renvoyer un pointeur sur la planete.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par gwyohm Voir le message
    Bonjour,

    Je ne suis pas sur d'avoir tout compris...
    Tu construis pdat tel que j représente une date et i un objet. Ton problème est que pour un objet i donné (ex: SOLEIL), chaque valeurs qui lui est associé en j, tu as les mêmes valeurs qui correspondent à la dernière calculée ?
    Oui c'est exactement ça.
    Citation Envoyé par gwyohm Voir le message
    Si c'est bien ça, ton problème il faudrait que tu nous indiques ce que renvoie ta fonction set.
    Mais si tu renvoies this (une instance de Planete), pour chaque boucle sur la période, tu vas modifier l'instance unique de la planète, donc renvoyer un pointeur sur la planete.
    set renvoie bien this mais je ne comprend pas ton explication (pointeur, instance...) Je commence en POO

  4. #4
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Citation Envoyé par merlin31 Voir le message
    Oui c'est exactement ça.

    set renvoie bien this mais je ne comprend pas ton explication (pointeur, instance...) Je commence en POO
    Il faut que tu comprennes la différence entre une valeur et un pointeur :
    Pour simplifier
    Quand tu crées tes objets, tu alloues de l'espace en mémoire.

    Quand tu renvoies this, tu ne renvoie pas les valeurs associées à ton objet, mais une adresse mémoire vers ton objet.

    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var a = {valeur: "a"};
    alert(a.valeur);// -> a
    var b= a;
    b.valeur = "b";
    alert(b.valeur); // -> b
    alert(a.valeur); // -> b
    a et b pointent sur le même emplacement mémoire ; tu as exactement le même problème

  5. #5
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Merlin,
    Je vois des tas d'erreurs de syntaxe dans ta déclaration de SysSol. Admettons que tu as recopié le code à la main sur ce forum. Est-ce que ceci est normal ?
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    switch(this) {
    	case SOLEIL:
    		// …
    Le switch fait des comparaisons ==. En l’occurence cela revient à comparer ce qui suppose que SOLEIL est une variable globale.

    Ne serait-ce pas plutôt
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	case SysSol.corps.SOLEIL:
    		// …
    ?

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par gwyohm Voir le message
    Quand tu renvoies this, tu ne renvoie pas les valeurs associées à ton objet, mais une adresse mémoire vers ton objet.
    Ok, mais comment je peux faire pour que set me renvoie les valeurs?

    @Watilin Oui le code est recopié à la main. Je corrige les syntaxes mais mon problème est plutôt une erreur de conception

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. Réponses: 2
    Dernier message: 27/03/2010, 10h48
  3. Réponses: 10
    Dernier message: 18/01/2008, 14h50
  4. Réponses: 5
    Dernier message: 18/07/2006, 15h32
  5. Réponses: 4
    Dernier message: 25/07/2005, 14h24

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