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 :

Héritage en JavaScript ?!


Sujet :

JavaScript

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Héritage en JavaScript ?!
    Bonjour à tous,

    Je suis un jeune padawan en JS et j'ai un problème en ce qui concerne l'héritage !!
    Je m'explique :
    J'ai une bibliothèque dans laquelle est défini des constructeurs ainsi que des prototypes comme ceux suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function MotionInfo() {};
    MotionInfo.prototype = new Object();
     
    function MotionHRMInfo() {};
    MotionHRMInfo.prototype = new MotionInfo();
    Je voudrais juste savoir comment hérité des prototypes suivant dans mon main (classe fille) ?
    J'ai essayé ce bout de code ci-dessous, mais il y a un WARNING qui dit que "MotionInfo()" est utilisé avant d'être défini ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function Heritage(){}
    Heritage.prototype= new MotionInfo();
    Voilà.. j'espère vraiment que quelqu'un réussira à m'aider, ça fait plusieurs jours que je galère !
    Merci d'avance,
    Kaniar Kode

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    Exemple :

    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
    var MotionInfo = function( name ){
        this.texte = name;
    };
     
    MotionInfo.prototype.setTexte = function( str ){
        this.texte = str;
    };
     
    MotionInfo.prototype.getTexte = function( str ){
        return this.texte;
    };
     
    var MotionHRMInfo = function( name, nombre ){
        MotionInfo.call( this, name );
        this.nombre = nombre;
    };
     
    MotionHRMInfo.prototype = Object.create( MotionInfo.prototype );
     
    MotionHRMInfo.prototype.setNombre = function( n ){
        this.nombre = n;
    };
     
    MotionHRMInfo.prototype.getNombre = function( n ){
        return this.nombre;
    };
     
    var ObjMI = new MotionInfo( "Pierre" ),
        ObjHRMMI = new MotionHRMInfo( "Hector", 22 );
     
    // debug, console, touche F12
    console.log( "ObjMI = ", ObjMI );
    console.log( "ObjHRMMI = ", ObjHRMMI );
    console.log( "ObjHRMMI instanceof MotionInfo = ", ObjHRMMI instanceof MotionInfo );
     
    ObjMI.setTexte( "Jean" );
    ObjHRMMI.setNombre( 42 );
     
    console.log( "ObjMI.getTexte() = ", ObjMI.getTexte() );
    console.log( "ObjHRMMI.getTexte() = ", ObjHRMMI.getTexte() );
    console.log( "ObjHRMMI.getNombre() = ", ObjHRMMI.getNombre() );

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci de votre réponse et pour le code.

    Mais je ne comprend toujours pas à quelle moment l'héritage se fait ?
    L'objet fille doit-il avoir le même nom que l'objet mère se trouvant dans ma bibliothèque pour que l'héritage se fasse automatiquement ?
    Ci-dessous mes 2 fonctions avec commentaires:
    Je voudrais savoir ce que veut dire "@super", et aussi si quelqu'un serait capable de m'expliquer clairement comment hérité en JS...?

    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
    /**
     * This is a common abstract interface used by different types of motion information objects.
     *
     * @super Object
     * @constructor
     * @return {MotionInfo}
     */
    function MotionInfo() {};
    MotionInfo.prototype = new Object();
     
    /**
     * This interface represents HRM data.
     *
     * @super Object
     * @constructor
     * @return {MotionHRMInfo}
     */
    function MotionHRMInfo() {};
    MotionHRMInfo.prototype = new MotionInfo();
    Cordialement,
    Kaniar Kode

  4. #4
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    merci d'utiliser la balise code bouton # dans l'éditeur

    tout ce qui est dans est un commentaire. ça n'a donc rien à voir avec l'héritage.

    les outils pour documenter le code utilisent les commentaires pour fournir de la doc.
    pour différencier un commentaire simple d'un commentaire fournissant une doc on utilise la notation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /*
     * Ceci est un commentaire
     */
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /**
     * ceci est du point de vu Javascript un commentaire
     * mais les outils de documentation récupère le contenu
     * pour faire la doc
     */
    les annotations n'existent pas en javascript.
    les @toto n'ont aucunes signification pour javascript.
    situé dans un bloc de documentation elles peuvent être utilisé par l'outil de doc pour fournir de l'information
    @constructor indique dans la doc que la fonction est un constructeur.

    mais tout cela n'a absolument rien à voir avec javascript.

    tu peux regarder le cours
    http://t-templier.developpez.com/tut...vascript-poo1/
    il n'est pas trop mal.
    une petite note tout de même ce cours date un petit peu et niveau syntaxe on recommande aujourd'hui d'utiliser var obj = {}; à la place de var obj = new Object();. De même pour la déclaration de tableau.

    celui-ci est bien aussi il explique bien la notion de prototype de javascript bien qu'ensuite il traite d'une lib
    http://sii-rennes.developpez.com/tut...rientee-objet/
    A+JYT

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2012
    Messages : 23
    Points : 31
    Points
    31
    Par défaut
    Bonjour,
    Pour l'héritage de javascript, il y a plusieurs manières. Celle que tu utilise se base sur des fonctions constructeurs et les prototype, ça t'oblige acréer tes objets avec la commande new.
    Je vais expliquer ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function MotionInfo() {} //Création du constructeur MotionInfo
    MotionInfo.prototype = new Object();  //Inicialisation du prototype de MotionInfo avec un object vide (ligne non nécésaire, elle permet de vider d'éventuels prototype parasite)
     
    function MotionHRMInfo() {}  //Création du constructeur MotionHRMInfo
    MotionHRMInfo.prototype = new MotionInfo(); //Inisialisation du prototype MotionHRMInfo avec un nouvel object MotionInfo. C'est là que se fait l'héritage MotionInfo (parent) MotionHRMInfo (enfant)
    C'est plus intéressant avec des atributs et des méthodes:
    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
     
    function MotionInfo() {
      this.a = "Salut";
      this.b = 25;
    }
    MotionInfo.prototype.geta = function(){
      return this.a;
    };
     
    function MotionHRMInfo() {
      this.a = "Bay";
      this.c = 45;
    }
    MotionHRMInfo.prototype = new MotionInfo(); //L'héritage se fait à cette ligne
    MotionHRMInfo.prototype.getc = function(){
     return this.c;
    };
     
    var hrm1 = new MotionHRMInfo();
    var hrm2 = new MotionHRMInfo();
     
    hrm1.a = "Bonjour";
    hrm1.b = 10;
    hrm1.c = 10;
    console.log("hrm1.a = " + hrm1.a);
    console.log("hrm1.geta() = " + hrm1.geta());
    console.log("hrm2.a = " + hrm2.a);
    console.log("hrm2.geta() = " + hrm2.geta());
     
    console.log("hrm1.b = " + hrm1.b);
    console.log("hrm2.b = " + hrm2.b);
     
     
    console.log("hrm1.c = " + hrm1.c);
    console.log("hrm2.c = " + hrm2.c);
    Fais des testes de la sorte, ça va t'aider à comprendre.
    Bon courage.

Discussions similaires

  1. Héritage en javascript
    Par Attrox dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/09/2014, 14h57
  2. Héritage en JavaScript
    Par scandinave dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/02/2013, 19h05
  3. Balise OBJECT et héritage (css/javascript)
    Par Dionyzos dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 01/04/2007, 11h08
  4. Un pseudo héritage en javascript
    Par sekaijin dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 05/07/2006, 11h31

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