Même si le Javascript est plus un langage prototypé qu’un langage objet. Même s’il ne permet pas l’héritage ou la définition du niveau d’accès des champs ou méthodes d’un objet. Certaines subtilités autorisent de créer des champs ou méthodes privés.

Avec l’accroissement de l’utilisation du langage Javascript et la multiplication des bibliothèques utilisées, il est nécessaire de pouvoir mieux maîtriser l’utilisation des classes développées. Et pour cela, il faut pouvoir protéger l’accès de certains champs ou des certaines méthodes.

Pour définir une classe en Javascript, il faut écrire du code comme ci-dessous :

function Personne() {
	this.firstname;
	this.lastname;
	this.toString = function(fn,ln) {
		return this.firstname+' '+this.lastname = ln;
	}
}

Ensuite pour utiliser, rien de plus simple :

var client = new Personne();
client.firstname = 'Pierre';
client.lastname = 'Tombale';
alert(client.toString());

Chaque champ et méthode sont accessibles librement. Il n’est plus nécessaire de prouver l’efficacité de l’encapsulation. Mais pour l’utiliser, il est nécessaire de pouvoir déclarer des champs privés et également des méthodes privées. Voici le code Javascript à écrire pour obtenir la même classe que précédemment mais avec champs et des méthodes privés pour utiliser l’encapsulation :

function Personne() {
	var firstname;
	var lastname;
	var checkIdentity = function(fn,ln) {
		if (!fn || !ln) throw new Error('Invalid identity');
	}
	this.setIdentity = function(fn,ln) {
		checkIdentity(fn,ln);
		firstname = fn;
		lastname = ln;
	}
	this.toString = function(fn,ln) {
		return firstname+' '+lastname = ln;
	}
}

L’utilisation de cette classe diffère puisque les champs sont privés maintenant :

var pipo = new Personne();
pipo.setIdentity('Pierre','Tombale');
alert(pipo.toString());
try {
	pipo.setIdentity(null,null);
} catch ( error) {
	alert(error.message);
}

Avec ce type d’implémentation, il est possible d’utiliser l’encapsulation en Javascript et ainsi de mieux maîtriser l’utilisation des classes codées soi-même par d’autres développeurs.