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 :

Type primitif et objet


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2014
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Arménie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2014
    Messages : 388
    Points : 578
    Points
    578
    Par défaut Type primitif et objet
    Bonjour,

    Ci-dessous, un code volontairement simplifié, dont je voudrais que la dernière ligne donne true à la place de false. Quelle est la bonne manière de s'y prendre, selon vous?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    personne = function (nom, prenom) {
      this.nom=nom;
      this.prenom=new String(prenom);
    };
     
    p1 = new personne("Dupont","Paul");
    p2 = new personne("Dupont","Paul");
     
    alert(p1.nom == p2.nom);        // true
    alert(p1.prenom == p2.prenom);  // false

  2. #2
    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 637
    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 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    comma ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    personne = function (nom, prenom) {
      this.nom=nom;
      this.prenom=prenom;
    };
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(p1.prenom.valueOf()  === p2.prenom.valueOf() );
    car prenom est une instance d'objet et deux instances différentes ne peut être égales !
    Il faut comparer leur valeur => valueOf()
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2014
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Arménie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2014
    Messages : 388
    Points : 578
    Points
    578
    Par défaut
    Merci SpaceFrog.
    Je ne connaissais pas la méthode valueOf().

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 955
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 955
    Points : 44 103
    Points
    44 103
    Par défaut
    Bonjour,
    pourquoi ne pas passer par une écriture « moderne » avec getter et setter
    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
    class Person {
      constructor(nom, prenom) {
        this._nom = nom;
        this._prenom = prenom;
      }
      get nom() {
        return this._nom;
      }
      set nom(nom) {
        this._nom = nom;
      }
     
      get prenom() {
        return this._prenom;
      }
      set prenom(prenom) {
        this._prenom = prenom;
      }
    }
    const P1 = new Person("Dupont", "Paul");
    const P2 = new Person("Dupont", "Paul");
     
    console.log(P1.nom == P2.nom);        // true
    console.log(P1.prenom == P2.prenom);  // true
    Mais pourquoi passer par une new String ?
    Dans ce cas tu mets ton valueOf() dans ton getter ce qui allégera l'écriture dans ton code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      get nom() {
        return this._nom.valueOf();
      }

  5. #5
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2014
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Arménie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2014
    Messages : 388
    Points : 578
    Points
    578
    Par défaut
    Bonjour,

    Passer par une écriture « moderne » avec getter et setter, c'est remplacer mes 10 lignes de code par 24 lignes de code. L'avantage compense-t-il l'inconvénient?

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 955
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 955
    Points : 44 103
    Points
    44 103
    Par défaut
    L'avantage compense-t-il l'inconvénient?
    Je ne le vois pas comme cela !

    On sait que les classes en JavaScript ne sont pas l'équivalent des classes de certains autres langages, et on ne va pas entrer dans le débat Class vs Function.

    Ceci étant je vais être très pragmatique, oui c'est globalement plus verbeux mais à peine, et même si l'ajout des classes est considéré comme du « sucre syntaxique », mais pas que quand même, lorsque je rencontre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const Person = function () {
    }
    ... je pense définition d'action(s).

    Par contre lorsque je rencontre :
    ... je pense définition des propriétés d'un objet.

    Le côté sémantique et la syntaxe plus concise me paraissent quand même un point intéressant à prendre en compte.

    Je te le concède, cet argumentaire est faible, mais cela fait maintenant plus de six ans qu'est apparue cette notion de classe, il serait temps de s'approprier les nouveautés du langage.

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

Discussions similaires

  1. xml-bean généré avec type primitif au lieu de l'objet
    Par mehdikwa dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 30/04/2014, 14h22
  2. Savoir si un objet est d'un type primitif
    Par ploxien dans le forum Langage
    Réponses: 3
    Dernier message: 09/05/2007, 09h39
  3. [POO] Comment connaître le type d'un objet
    Par zizou39 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/03/2005, 09h46
  4. [prog dynamique]Constructeur avec type primitif
    Par -=Spoon=- dans le forum Langage
    Réponses: 2
    Dernier message: 16/12/2004, 10h33
  5. Comment detecter le type d'un objet?
    Par nickylarson dans le forum C++Builder
    Réponses: 3
    Dernier message: 24/06/2003, 15h23

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