PRATIQUE CLIENTS WEB 
Base.js : améliorer le fonctionnement OO de JavaScript
 
Un court script rend l'utilisation de la programmation Objet avec JavaScript plus naturelle, et démultiplie son intérêt : contournement de prototype, implémentation d'un équivalent de .super()... (29/09/2006)
  Forum

Réagissez dans les forums de JDN Développeurs

Déjà auteur de l'extension JavaScript IE7, qui aide les développeurs à ne pas devoir contourner certains bugs CSS sous Internet Explorer 5 et 6, Dean Edwards a mis au point la classe Base, dans le but de simplifier la mise au point de script orientés objet en JavaScript. Pour ce faire, Base() étend simplement l'objet Object de JavaScript, en y ajoutant deux méthodes d'instance et une méthode de classe.

La première méthode d'instance est extend(). Celle-ci sert à étendre un objet avec une nouvelle interface. La seconde méthode d'instance est base() qui, dans le cas où une méthode a été redéfinie (override), donne accès à cette méthode malgré tout. Enfin, la méthode de classe est simplement Base.extend(), et permet de créer des classes qui héritent de la méthode extend().

En tout et pour tout, Base.js est une classe légère (à peine plus de 100 lignes de code, commentaires compris) et inobstrusive, qui répond à quatre besoins précis de JavaScript en matière de programmation OO :
 - éviter d'avoir à faire appel à Classe.prototype pour créer une classe,
 - offrir un accès intuitif aux méthodes redéfinies, proche du super de Java,
 - éviter d'appeler le constructeur de la classe lors du prototypage,
 - faciliter la création de méthodes et propriétés de classe statiques,

Il ne s'agit donc pas là d'ajouter de formidables fonctionnalités graphiques, comme le ferait script.aculo.us, mais d'offrir plus de possibilités aux développeurs JavaScript souhaitant utiliser intensément les capacités OO du langage. Ainsi, au lieu de devoir écrire
  1. function Animal(nom) { // ...code... };
  2. Animal.prototype.manger = function() { // ...code... };
  3. Animal.prototype.exprimer = function(message) { // ...code... };
...le développeur utilisant Base.js écrira...
  1. var Animal = Base.extend({
  2.     constructor: function(nom) {
  3.         this.nom = nom;
  4.     },
  5.    
  6.     nom: "",
  7.    
  8.     manger: function() {
  9.         this.exprimer("Miam !");
  10.     },
  11.    
  12.     exprimer: function(message) {
  13.         alert(this.name + " dit : " + message);
  14.     }
  15. });
Base.js utilise fortement la syntaxe JSON (lire notre article "JSON : un format de retour alternatif pour Ajax") pour simplifier la lecture. Si l'objet résultant est le même, les fonctionnalités sont améliorées :
  1. var Souris = Animal.extend();
  2. var Chat = Animal.extend({
  3.     manger: function(nourriture) {
  4.         if (nourriture instanceof Souris)
  5.           this.base(); // appel de Animal.manger()
  6.         else this.say("Beurk !");
  7.     }
  8. });

Ce qui est une écriture OO autrement plus naturelle qu'en devant passer par .prototype.

 
Xavier Borderie, JDN Développeurs
 
 
Accueil | Haut de page