Le JavaScript permet de programmer en objet, mais son gros problème, c’est de ne pas le permettre d’une façon aussi claire que des langages comme le C++ ou le Python. L’ennui, c’est que le JavaScript est de plus en plus utilisé pour construire de grosses applications, notamment grâce à l’essor du HTML5, et donc on aimerait bien pouvoir manier la POO avec ce langage… Nous allons voir ici comment faire, ou plutôt comment bidouiller pour recréer la POO.

Une classe

Le JavaScript est un langage assez paradoxal en fait, il n’a pas vraiment de syntaxe claire pour construire des objets et pourtant, il utilise ces derniers en masse : une fonction, un array, une chaîne de caractères, toutes ces choses sont autant d’exemples d’objets natifs que l’on trouve dans le JavaScript. Ainsi, en JavaScript, une classe, ce sera une fonction :

function Classe() {
}

var Classe = function() {
}

Comme vous le voyez, plusieurs moyens sont possibles pour créer une fonction (et donc une classe). Le plus souvent, on préférera la seconde méthode, car elle permet de bien différencier les deux cas : création de fonction et création de classe.

Méthodes et attributs

Un attribut (ou propriété) sera une variable définie dans la classe (donc dans notre fonction). Nous créerons donc nos attributs de cette manière :

var Classe = function() {
	var attr0, attr1, attr2;
	var autre_attribut;
	var attribut_avec_une_valeur_par_defaut = 'toto';
}

Une fonction étant un objet stocké dans une variable, les méthodes se créent de la même façon :

var Classe = function() {
	var methode = function() {
	}
	
	var attr0, attr1, attr2;
	var autre_attribut;
	var attribut_avec_une_valeur_par_defaut = 'toto';
}

Les attributs créés sont bien entendu utilisables dans la méthode puisqu’ils se situent dans l’espace de portée au-dessus de celui de la méthode. Si vous modifiez un attribut dans une méthode et que vous réutilisez ce même attribut dans une autre méthode, il conservera sa valeur modifiée.

Portée

Si vous êtes habitué à la POO, vous vous posez sûrement une question importante : quelle portée possèdent les attributs et méthodes créés de cette façon ? La réponse est simple : privée. Bon, pour les attributs, c’est plutôt cool (principe d’encapsulation), mais pour les méthodes, c’est moyen car si on ne peut pas utiliser notre objet de l’extérieur, il ne sert pas à grand-chose… Pour créer des méthodes publiques, c’est simple :

var Classe = function() {
	var methode = function() {
	}
	
	this.methodePublique = function() {
	}
	
	var attr0, attr1, attr2;
	var autre_attribut;
	var attribut_avec_une_valeur_par_defaut = 'toto';
}

Bien entendu, une méthode publique peut accéder aux attributs et méthodes privés. Vous pouvez également déclarer des attributs publics de cette manière, mais c’est toujours l’éternel débat : respecter l’encapsulation ou pas. Petite remarque importante : n’oubliez surtout pas de ne pas mettre var devant ce genre de ligne (sinon, ça plantera) !

Instanciation et utilisation de l’objet

On sait donc créer une classe, c’est bien, mais encore faut-il savoir l’utiliser. Pour instancier une classe et obtenir un objet, on retrouve une syntaxe assez familière :

var objet = new Classe();

Et pour utiliser tout ce qui est public, là encore, rien d’extraordinaire :

objet.methodePublique();

Où est le constructeur ?

En voila, une question importante ! En fait, le constructeur, c’est toute la fonction elle-même (Classe dans notre exemple). Ainsi, nos attributs ont l’air d’être créés un peu n’importe où vus comme ça mais ils sont en fait créés dans le constructeur !

Si vous avez bien compris, vous avez donc la réponse à la dernière question qu’on va se poser : et si on veut des paramètres (ou arguments) pour notre objet (par exemple la couleur par défaut d’un objet) ? Ces paramètres, dans tous les autres langages, il faut les indiquer dans le constructeur. Ici, c’est pareil :

var Classe = function(parametre0) {
	var methode = function() {
	}
	
	this.methodePublique = function() {
	}
	
	var attr0, attr1, attr2;
	var autre_attribut;
	var attribut_avec_une_valeur_par_defaut = 'toto';
	var utilisons_le_parametre = parametre0;
}

var objet = new Classe('bleu');
objet.methodePublique();

À noter que, bien évidemment, les méthodes ne sont que des fonctions dans une classe alors bien sûr, vous pouvez leur faire utiliser des paramètres comme vous le feriez avec n’importe quelle autre fonction…

Et c’est pas fini !

Enfin si, c’est fini, mais juste pour ce tutoriel car avec ça, vous allez pouvoir utiliser la POO de base sans trop de problèmes. Il faut savoir qu’il existe d’autres façons de modifier une classe, notamment avec l’utilisation de prototype, un aspect un peu particulier qui fera l’objet d’un autre tutoriel.