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 :

Accès aux propriétés d'un objet


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Avatar de irnbru
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2004
    Messages : 316
    Points : 500
    Points
    500
    Billets dans le blog
    1
    Par défaut Accès aux propriétés d'un objet
    Hello à tous, j'ai un tableau d'objets "user" chaque user contient des propriétés. J'ai fait le script suivant pour afficher toutes les propriétés de tous les objets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    for(var o in tableau){
         // Recupere un objet du tableau
         var p = tableau[o];
     
         // parcours toutes les proprietes de l'objet en cours et affiche sa valeur
          for (var i in p) {
            // afficher respectivement le nom de la propriete en cours et sa valeur 
    	 service.innerText+=i + " " + p[i] + " ";
          }
     
    }
    Si j'utilise la notation p.i cela passe pas, par contre si j'écrivais p.NomPropriete directement en dur cela récupère bien la valeur de la dite propriété

    en dynamique je suis obligé de faire p[i] ou i est NomPropriete
    si j'écrivais en dure je peux faire p.NomPropriete sans probleme.

    Mais avec la notation p.i (où i est NomPropriete récupéré en boucle) ne marche pas

    Vous pouvez m'expliquer pourquoi? Est-ce la notation non intuitive p[i] est la seule solution?

    MErci pour tout
    IRNBRU

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 162
    Points : 209
    Points
    209
    Par défaut
    Bonjour,

    En fait, le problème (s'il s'agit vraiment d'un problème en fait ?), c'est que Javascript interprête l'expression
    en
    C'est pourquoi tu es obligé de passer par la notation de type "tableau" :
    où javascript comprend clairement qu'il faut interprêter i.

    A+

  3. #3
    Membre confirmé
    Avatar de irnbru
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2004
    Messages : 316
    Points : 500
    Points
    500
    Billets dans le blog
    1
    Par défaut
    Mmm je vois mais non j'ai bien mis p[i] (et non p["i"]) où i est est une variable remplacée par le nom de la propriété renvoyée par ma boucle for

    supposons que i = "Name" alors

    p[i] fonctionne bien.

    J'imagine qu'il remplace par p["Name"] ou p['Name']

    par contre si je fais directement :
    p.i il plante. Il ne fait pas le remplacement en faisant p.Name...

    Si je tape directement en dure "Name" avec p.Name cela passe.

    Donc p[i] est interprété et i est remplacé, mais p.i n'est pas interprété et pense que i est le nom de la propriété directement et non var i = "Name";

    Vois-tu où je veux en venir?

    Cheers
    IRNBRU

  4. #4
    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 640
    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 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    dans
    il cherche i comme prorpiété de p et pas le contenu de i

    si tu tiens à conserver cette notation il faudrait passer par eval (beuark)

    mais reste de loin la meilleur syntaxe

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 162
    Points : 209
    Points
    209
    Par défaut
    Oui, oui, je vois bien où tu veux en venir, et tu as exactement compris le pb

    Donc p[i] est interprété et i est remplacé, mais p.i n'est pas interprété et pense que i est le nom de la propriété directement et non var i = "Name";
    Javascript n'interprête pas i dans la notation p.i, si tu veux accéder à une propriété "dynamique", tu es obligé de passer par la notation tableau.
    S'il devait interprêter cette notation, on ne pourrait plus accéder à des propriétés directement via cette notation.

    Exemple:
    Si une variable name est déclarée, il irait chercher la valeur de name pour accéder à la propriété, sinon il relèverait une erreur "name is undefined".
    En gros pour accéder à une propriété, il faudrait faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    prop = "name";
    p.prop
    au lieu d'une notation plus directe :
    Ca allourdirait fortement le code...

  6. #6
    Membre confirmé
    Avatar de irnbru
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2004
    Messages : 316
    Points : 500
    Points
    500
    Billets dans le blog
    1
    Par défaut
    Okay merci à vous deux pour votre expérience en javascript qui n'est pas encore ma tasse de thé mais je suis obligé de m'y mettre à cause d'un projet que je reprends et fait quasiment que de javascript l'horreur lol

    Mais je commence à m'y retrouver.

    Cheers
    IRNBRU

  7. #7
    Membre confirmé
    Avatar de irnbru
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2004
    Messages : 316
    Points : 500
    Points
    500
    Billets dans le blog
    1
    Par défaut
    J'ajoute cette information qui explique bien le problème que j'avais rencontré:

    "Since you can't know the property names when you write the program, there is no way you can use the . operator to access the properties of the portfolio object. You can use the [] operator, however, because it uses a string value (which is dynamic and can change at runtime) rather than an identifier (which is static and must be hardcoded in the program) to name the property."

    Citation Envoyé par irnbru Voir le message
    Hello à tous, j'ai un tableau d'objets "user" chaque user contient des propriétés. J'ai fait le script suivant pour afficher toutes les propriétés de tous les objets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    for(var o in tableau){
         // Recupere un objet du tableau
         var p = tableau[o];
     
         // parcours toutes les proprietes de l'objet en cours et affiche sa valeur
          for (var i in p) {
            // afficher respectivement le nom de la propriete en cours et sa valeur 
    	 service.innerText+=i + " " + p[i] + " ";
          }
     
    }
    Si j'utilise la notation p.i cela passe pas, par contre si j'écrivais p.NomPropriete directement en dur cela récupère bien la valeur de la dite propriété

    en dynamique je suis obligé de faire p[i] ou i est NomPropriete
    si j'écrivais en dure je peux faire p.NomPropriete sans probleme.

    Mais avec la notation p.i (où i est NomPropriete récupéré en boucle) ne marche pas

    Vous pouvez m'expliquer pourquoi? Est-ce la notation non intuitive p[i] est la seule solution?

    MErci pour tout
    IRNBRU

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

Discussions similaires

  1. Accés aux propriétés d'un objet ?
    Par lecra dans le forum ActionScript 3
    Réponses: 3
    Dernier message: 04/09/2012, 09h24
  2. Réponses: 4
    Dernier message: 22/12/2005, 11h43
  3. [Problème] Accès aux propriétés de listes nommées avec []
    Par VincentL dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/10/2005, 16h13
  4. Accès aux propriétés ScrollBar d'un composant TMemo
    Par fausto dans le forum C++Builder
    Réponses: 2
    Dernier message: 10/10/2003, 11h08
  5. Accés rapide aux propriétés d'un Objet
    Par Alacazam dans le forum C++Builder
    Réponses: 4
    Dernier message: 28/11/2002, 21h56

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