Salut
javascript n'est pas à proprement parler un langage full object
Il est possible de définir des classes et des objets.
Mais il n'existe pas de syntaxe propre à cela.

javascript utilise des fonctions en guise de définition de classe.
L’héritage n'est du coup pas aisé du tout.

Voici comment y parvenir tout de même.
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
42
43
44
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  <title></title>
  <script  language="javascript">
 
    function ClassA () {
      this.nom = "mon nom";
 
      this.alert = function () {
        alert('Je suis un A');
      }
    } 
 
    function ClassB() {
 
      /* héritage */
      this.superclass = ClassA;             // classe parente
      this.prototype = new this.superclass; // héritage des méthodes
      this.superclass();                    //appel du super constructeur
      delete this.superclass;              // inutile de garder la classe parente
 
      this.name = function() {
        alert(this.nom);
      }
      this.alert = function () {
        alert('Je suis un B');
        this.prototype.alert();        //appel d'une méthode parente
      }
    }
 
    a = new ClassA;
    a.alert();
    b = new ClassB;
    b.alert();
    b.name();
 
 
  </script>
  </head>
  <body>
  </body>
</html>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
function ClassA () {...
défini une fonction mais en javascript cela est aussi un constructeur d'objet.
ou permet d'obtenir une instance d'un object construit avec le constructeur ClassA.

Cet objet n'a pas à proprement parler de classe. Mais il a un constructeur on peu conceptuellement considérer ce dernier comme une classe. D’où le nom employé dans l'exemple.

Comme dans tout langage à objet on peut définir des membres et des méthodes.
un membre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
      this.alert = function () {
        alert('Je suis un A');
      }
    }
une methode.

Comme dans beaucoup de langage à objet c'est le point qui sert à référencer un membre ou une méthode.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
    a = new ClassA;
    a.alert();
    a.nom;
Reste le problème de l'héritage. il faudrait pouvoir dire qu'une classe fille est dérivée d'une classe parente. Mais les classes n'existant pas réellement en javascript il fait faire avec les constructeurs.
C’est le but du code suivant dans le consturcteur ClassB
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
    function ClassB() {
 
      /* héritage */
      this.superclass = ClassA;             // classe parente
      this.prototype = new this.superclass; // héritage des méthodes
      this.superclass();                    //appel du super constructeur
      delete this.superclass;              // inutile de garder la classe parente
La solution proposée ici consiste à changer le prototype de la fonction. Par défaut celui-ci est Object l'objets dont tout dérive dans javascript.
En faisant cela les instances de ClassB pouront utiliser les méthodes de leurs parents.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
this.prototype = new ClassA
Mais les membres ne sont pas dans le Constructeur de ClassB il faut donc faire appel au constructeur parent.
On ne peut écrire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
    function ClassB() { 
    ClassA();
    unA = new ClassA();
    this.unA=new ClassA();
    this=new ClassA();
Car on ne veut pas appeler la fonction ClassA
On ne veut pas de variable temporaire locale a
On ne veut pas de membre this.a construit avec ClassA
Et on ne veut pas devenir un simple objet ClassA

Il faut donc appeler le superconstructeur qui est en fait Mais javascript interdit cet appel. C’est pour cette raison que l'on créé un membre this.superclass que l'on détruit ensuite;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
      this.superclass = ClassA;             // classe parente
      this.superclass();                    //appel du super constructeur
      delete this.superclass;              // inutile de garder la classe parente
À partir de là nous avons un héritage proche de ce qui nous trouvons dans de nombreux langages.
La surcharge fonctionne, le polymorphisme aussi.

Manque un tout petit bout l'appel à une méthode parente.
dans de nombreux langages.
Pour parvenir à cela en javascript il faut utiliser la syntaxe:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
        this.prototype.alert();        //appel d'une méthode parente
Concrètement vous pouvez continuer à créer vos classes en javascript de la façon la plus "naturelle" et pour celle ou vous voulez bénéficier d'un héritage il suffit de coller
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
      /* héritage */
      this.superclass = ClassA;             // classe parente
      this.prototype = new this.superclass; // héritage des méthodes
      this.superclass();                    //appel du super constructeur
      delete this.superclass;              // inutile de garder la classe parente
et de changer le nom de la classe (ClassA)

Nous n'avons pas un langage full object mais il y a un mieux.
A+