Objets :Créer une classe Javascript

Un article de WikiTuto.

Jump to: navigation, search
  1. Coder le Javascript
  2. Navigateurs incompatibles
  3. Debugger
  4. Fichiers externes
  5. Orienté objet
  1. Déclaration et affectation
  2. String et nombre
  3. Vecteurs ou tableaux
    1. Grandeur d'un vecteur
    2. Vecteur en string
    3. Trier un vecteur
    4. Autres méthodes
  • Les Opérateurs
  1. Arithmétiques
  2. Relationnels
  3. Logiques
  4. Priorités
  5. Eval
  • Les Contrôles
  1. If - Else
  2. Switch case
  3. Boucle for
  4. Boucle while
  5. Boucle forever
  6. Boucle do-while
  7. Minuteries
  8. Intervalles
  9. Arrêt
  • Les Fonctions
  1. Déclarations
  2. Portée des variables
  3. Valeur de retour
  4. Appel via lien
  5. With
  1. Onclick - Ondblclick
  2. Boutons rollover
  3. Détection clavier
  4. Attribution de focus
  5. Chargement de page
  6. Onerror
  7. Supprimer erreurs
  8. Infos sur les erreurs
  • Les Objets
  1. Propriétés et méthodes
  2. This
  3. Créer un objet
  4. Créer une classe
  5. Voir propriétés objets
  6. Objets link et anchor
  7. Objet history
  8. Objet image
  • Les Fenêtres
  1. Barre d'état
  2. Modifier les couleurs
  3. Changer titre de page
  4. Afficher informations
  5. Ouvrir nouvelle fenêtre
  6. Communication fenêtres
  7. Imprimer une fenêtre
  8. Redimensionner fenêtre
  9. Déplacer / fermer
  10. Boîtes de messages
  • Les Strings
  1. Objet String
  2. Sous-chaînes
  3. Concaténation
  4. Formater
  5. Ancrages
  6. Longueur chaîne
  7. Modifier la casse
  8. Rechercher chaîne
  9. Remplacer texte
  10. Découper chaîne
  • Les Dates
  1. Objet Date
  2. Afficher heure et date locale
  3. Lire valeurs heure/date
  4. Régler valeurs heure/date
  5. Fuseaux horaires
  • Objet Math
  1. Propriétés
  2. Méthodes
  3. Arrondir des nombres
  • Les Formulaires
  1. Champs de saisie
  2. Type mot de passe
  3. Éléments cachés
  4. Zones de texte
  5. Listes de sélections
  6. Cases à cocher
  7. Boutons radio
  8. Eval
  9. Désactivation
  10. Envoi formulaire
  • Les Cadres
  1. Objet Frame
  2. Accéder cadre
  3. Nombre de cadres
  4. Référer aux cadres
  5. Écrire
  6. Redimensionner
  7. Cadre cible radio
  8. Imprimer
  • Environnement
  1. Détection système
  2. Les cookies
  3. Multiples cookies
  4. Path domain
  5. Codage caractères

Auteur : Mystick

Sommaire

Explication

Afin de créer son propre objet (pour l'instancier), certains l'auront deviné, il vous faudra créer une classe. Qu'est-ce que c'est qu'une classe? Une classe d'objets est un ensemble d'informations regroupés sous un même nom, qui décrivent la structure et le comportement commun de ces objets.

Définir une classe

Pour définir une classe, il faut préciser :

  • Les propriétés (ou attributs) qui décrivent ses caractéristiques.
Une propriété est une variable qui est attachée à un type d'objets, et qui est contient une de ses caractéristiques.
  • Les méthodes (ou fonctions membres) qui décrivent ses comportements et ses actions
Une méthode est une fonction qui ne s'applique qu'à une classe d'objet.

Le JavaScript n'est pas un vrai langage orienté objet puisque certains concepts primordiaux ne sont pas implémentés comme le polymorphisme. Les classes en Javascript sont surtout utilisés pour créer des structures de données plus complexes et plus souples que les tableaux de variables.

Grâce à ce système, il devient possible de réunir plusieurs informations ayant un lien entre elles sous le couvert d'un seul mot beaucoup plus rapide à utiliser que de devoir répéter à chaque fois l'ensemble des informations. Donc on peut faire une classe qui regroupe toutes les informations qu'on désire conserver à propos d'un disque compact de musique et ainsi regrouper toutes ces informations dans une seule variable.

Une classe doit contenir un constructeur. Il s'agit d'une fonction qui crée l'objet et lui donne, si nécessaire, ses valeurs à la création (en C++, le constructeur possède une liste d'initialisation). Puis dans la classe il faut donner à l'objet ses propriétés et ses méthodes.

Exemple

    <head>
    <script language="javascript">
    // Constructeur de la classe
    function InfosCD(p_titre, p_artiste, p_anneeParution)
        {
        // Déclaration des variables membres (propriétés)
        this.titre = p_titre;
        this.artiste = p_artiste;
        this.anneeParution = p_anneeParution;

        // Déclaration d'une fonction membre (méthode)
        this.Artiste = ObtenirArtiste;
        }

    // Implémentation du code de la fonction membre
    function ObtenirArtiste()
     {
     return this.artiste;
     }
    </script>
    </head>

    <body>
    <script language="javascript">
    // La variable cd est une instance de la classe InfosCD
    // Lors de cette déclaration avec le mot clé new, this est "remplacé" par cd
    var cd = new InfosCD("Hollywood", "Marilyn Manson", 2000);

    document.write(cd.Artiste());
    </script>
    </body>
 

Dans cet exemple, le corps de la méthode Artiste() de la classe InfosCD a été défini dans une fonction ObtenirArtiste() externe à la classe, la liaison ayant été faite par la ligne « this.Artiste = ObtenirArtiste; ». L'inconvénient de cette écriture est que l'on ne peut plus définir d'autre fonction ObtenirArtiste() (par exemple, pour une classe InfosChanson pour laquelle il faudrait alors écrire une fonction ObtenirArtiste2() externe à cette classe). Il est donc préférable, pour éviter les conflits de nommage, de définir le corps des méthodes à l'intérieur de la classe considérée :

    <script language="javascript">
    // Constructeur de la classe
    function InfosCD(p_titre, p_artiste, p_anneeParution)
        {
        // Déclaration des variables membres (propriétés)
        this.titre = p_titre;
        this.artiste = p_artiste;
        this.anneeParution = p_anneeParution;

        // Déclaration et implémentation d'une fonction membre (méthode)
        this.Artiste = function()
         {
         return this.artiste;
         };
        }
    </script>
 

Cependant, dans les deux cas, chaque instance de la classe « embarquera » le corps des méthodes implémentées directement. Afin de rendre les objets plus légers, surtout si la classe est instanciée de nombreuses fois, il est conseillé d'utiliser la propriété prototype décrite plus bas pour rendre ces méthodes partagées par toutes les instances de la classe.

  • Pour obtenir un objet, appelé aussi instance de la classe, on utilise une fonction spéciale appelée constructeur et qui porte le nom de la classe. Un objet est alors créé par l'instruction :
  var objet = new Classe();
 

Les valeurs passées en paramètre vont affecter les propriétés de l'instance (et ainsi les initialiser), conformément au code du constructeur : ils doivent donc correspondre exactement, en place et en nombre, aux paramètres formels du constructeur. Mais on peut alternativement appeler le constructeur par défaut, sans paramètre, reportant à plus tard l'initialisation des propriétés.

  • Utiliser des fichiers de codes de classes externes .js
Il est très utile d'insérer le code de nos classes dans des fichiers externes puisqu'elles peuvent resservir ! N'oubliez pas qu'un script externe .js ne contient pas de balises HTML. Pour importer le code, il suffira d'écrire par exemple : <script src="classe_InfosCD.js"></script>

Faites un fichier externe par classe, c'est beaucoup mieux. Il est possible d'écrire dans le code d'une page en plus des définitions locales de fonctions en lien avec les classes importées de fichiers externes.

  • La propriété prototype
Cette propriété spéciale s'applique à une classe déjà construite et permet de lui ajouter de nouvelles propriétés et méthodes. On peut effectuer ces ajouts sur des classes prédéfinies ou définies par le programmeur.
Comme on ne passe pas par le constructeur de l'objet, il faudra attribuer une valeur aux propriétés ajoutées de cette manière. Voici la syntaxe : nomClasse.prototype.nomPropriété=valeurInitiale;
Pour l'ajout de méthodes, on dispose là aussi des deux écritures vues ci-dessus, c'est-à-dire soit en liant une fonction écriture par ailleurs, soit en implémentant directement la méthode à l'ajout (écriture préférable pour éviter les conflits de nommage).
Exemple :
 
    // Ajout à la classe InfosCD d'une propriété style valant "métal" pour toutes les instances
    InfosCS.prototype.style = "métal" ;
    // Ajout à la classe InfosCD d'une méthode Titre() directement définie
    InfosCD.prototype.Titre = function()
     {
     return this.titre;
     } ;
    // Ajout à la classe InfosCD d'une méthode AnneParution() par liaison de fonction
    InfosCD.prototype.AnneParution = ObtenirAnneeParution ;
    //Implémentation du code
    function ObtenirAnneParution()
     {
     return this.anneeParution;
     }
  
La propriété prototype permet de réaliser l'héritage de classes :
 
    // Classe mère
    function ClasseMere() {
        this.m = "mère" ;
    }

    ClasseFille.prototype = new ClasseMere() ;
    function ClasseFille() {
        this.f = "fille" ;
    }

    var fille = new ClasseFille() ;
    alert( fille.f ) ; // Affiche « fille »
    alert( fille.m ) ; // Affiche « mère »
  

Voir aussi

Boîte à outils
Annuaire gratuitCe site est listé dans la catégorie Informatique : Aide et astuces en informatique Annuaire