Comme tous les langages orientés objets Javascript permet au programmeur de définir ses propres classes.
Pour en expliquer les principes, nous nous appuyerons ici sur l'exemple suivant.
Il s'agit d'un tableau HTML contenant trois images de pièces d'échecs. Initialement les pièces sont blanches. Lorsqu'on clique sur l'image d'une pièce blanche, elle devient noire et lorsqu'on clique sur l'image d'une pièce noire, elle devient blanche.
La page HTML se trouve dans Exemple/ExempleNouvClasse.html. En ouvrant ce fichier vous constaterez que :
Pour réaliser cet exemple nous avons créé une nouvelle classe, nommée Case, représentant le contenu d'une des trois cellules du tableau.
Une manière de définir une nouvelle classe en Javascript consiste à en définir un constructeur.
Voici la définition du constructeur de la classe Case:
function Case (id) { this.identifiant = id; this.piece = ""; this.couleur = ""; this.ImagePiece= function () { code de la méthode ImagePiece } this.ChangerCouleur= function () { code de la méthode ChangerCouleur } }
pour des raisons de lisibilité nous avons ommis le code des méthodes ImagePiece() et ChangerCouleur().
A l'intérieur d'un constructeur, le mot clef this représente la nouvelle instance qui sera créé lorsque ce constructeur sera appelé.
Avant d'aborder le code des méthodes ImagePiece() et ChangerCouleur(), voyons comment une instance de la classe Case peut être crée.
Si on veut par exemple créer une case d'identifiant "0", on pourra écrire:
var c = new Case("0");
L'exécution de cette instruction génère une nouvelle instance c de la classe Case avec les valeurs de propriétés suivantes:
Voici le code de la méthode ImagePiece():
this.ImagePiece= function () { var HTML="<img src=\"../../Images/Echecs/" +this.piece+this.couleur+ ".gif\" />"; document.getElementById(this.identifiant).innerHTML=HTML; }
A l'intérieur d'une méthode, le mot clef this représente l'instance à laquelle on appliquera cette méthode.
Par exemple, si c est une instance de l'objet Case, l'instruction
c.ImagePiece();
est équivalente à:
var HTML="<img src=\"../../Images/Echecs/" +c.piece+c.couleur+ ".gif\" />"; document.getElementById(c.identifiant).innerHTML=HTML;
Supposons que c contiennent une tour blanche (donc que c.piece="Fou" et c.couleur="Blanc"). Supposons de plus que l'identifiant de la cellule représenté par c soit "1" (donc que c.identifiant="1"). Dans ce cas l'application de la méthode ImagePiece() à c aura exactement l'effet suivant:
Voilà le code de la méthode ChangerCouleur():
this.ChangerCouleur= function () { if (this.couleur=="Blanc") { this.couleur="Noir"; } else { this.couleur="Blanc"; } this.ImagePiece (); }
Elle fonctionne de la manière suivante:
La fonction Initialiser est appelée au chargement de la page. Voici son code:
function Initialiser () { var i; t= new Array (3); for (i=0; i<=2; i++) t[i]= new Case (i); t[0].piece="Tour"; t[0].couleur="Blanc"; t[1].piece="Fou"; t[1].couleur="Blanc"; t[2].piece="Cavalier"; t[2].couleur="Blanc"; for (i=0; i<=2; i++) t[i].ImagePiece(); }
et voilà ce que fait cette fonction:
L'appel de fonction ClicSurCase(i) est appelée lorsque l'utilisateur clique sur une la cellules numéro i tableau. Voici son code:
function ClicSurCase (i) { t[i].ChangerCouleur(); }
ClicSurCase(i) consiste donc simplement à appliquer la méthode ChangerCouleur au ième élément de t, ce qui aura l'effet désiré.