Ellipse Tutorial

Extension des prototypes Javascript existant



ATTENTION : Tutorial en cours d'écriture ! N'hésitez pas à nous signaler toute erreur ou suggestion.

Accès rapide :
   Extension du prototype associé au constructeur Object
   Extension du prototype associé au constructeur String
   Extension du prototype associé au constructeur Array
   Extension du prototype associé au constructeur Date

Comme nous l'avons vu dans le chapitre précédent, Javascript approche la notion de classe via le concept de prototype. Nous avons aussi vu que, comme la notion de classe n'existe pas en tant que telle, il est possible de modifier n'importe-quel objet et de lui ajouter des nouveaux membres à n'importe-quel instant. Comme un prototype Javascript est lui même un objet, il est donc possible d'étendre un prototype à tout momment. En conséquence, il est possible en Javascript, d'enrichir l'ensemble des méthodes proposées pour un type d'objet avec de nouvelles méthodes. La librairie JWT exploite cette possibilité. C'est le fichier corelib/services/web/javascript/Core.js qui réalise les extensions de prototypes existants.

Extension du prototype associé au constructeur Object

Object.prototype.clone : permet de cloner (de dupliquer une instance) en dupliquant, récursivement, toutes ses caractéristiques.

 
var Rational = Object.extendClass( new Object(), {

    initialize : function( numerator, denominator ) {
        this.numerator = numerator || 0;
        this.denominator = denominator || 1;
    },

    toString : function() {
        return "[" + this.numerator + "/" + this.denominator + "]";
    }

});
			
var original = new Rational( 3, 5 );
var clone = original.clone();
original.numerator *= 2;
original.denominator *= 2;

alert( original + " - " + clone ); // display : [6/10] - [3/5]

Object.prototype.extendClass : comme nous l'avons vu dans le chapitre précédent, cette méthode permet de mettre en oeuvre l'héritage au sein de la librairie JWT. L'exemple ci-dessus vous montre un l'utilisation de cette méthode. Je vous renvois aussi vers le chapitre précédent pour de plus amples informations.

Object.prototype.extendPrototype : permet d'enrichir un prototype existant. Cette méthode accepte un paramètre obligatoire : le tableau de membres à ajouter au prototype considéré. Elle accepte aussi un second paramètre facultatif : qui permet d'indiquer si, quand un membre du même nom existe déjà dans le prototype, on doit le remplacer ou non. Par défaut le membre n'est pas remplacé. Cela permet notamment, quand il y a des différences entre les navigateurs, de réaligner cette méthode (fonctionnellement parlant) en ajoutant un membre que là où le membre n'existe pas. Voici un petit exemple.

 
String.extendPrototype( {
    left : function( pos ) {
        if ( this.length <= pos ) return this;
        return this.substring( 0, pos );
    }
} );

alert( "theString".left(3) );

Extension du prototype associé au constructeur String

String.prototype.left : permet de produire une nouvelle chaine de caractères correspondant au x permiers caractères de la chaine considérée.

 
alert( "Langage Javascript".left( 7 ) );    // retourne "Langage"

String.prototype.right : permet de produire une nouvelle chaine de caractères correspondant au x derniers caractères de la chaine considérée.

 
alert( "Langage Javascript".right( 9 ) );    // retourne "Javascript"

String.prototype.trim : permet d'enlever les séparateurs (blancs, tabulations et retours à la ligne) présents en début et en fin de la chaine de caractères considérée.

 
alert( " \ttoto\n ".trim() );    // retourne "toto"

Extension du prototype associé au constructeur Array

Array.prototype.contains : permet de tester si un tableau de valeur possède ou non une valeur particulière. Le resultat est soit true soit false.

 
var tb = new Array();
tb.push( "toto" );
tb.push( "titi" );
tb.push( "tata" );
alert( tb.contains( "toto" ) );

Extension du prototype associé au constructeur Date

Date.prototype.getWeek : retourne le numéro de semaine dans l'année.

 
alert( new Date().getWeek() );

ATTENTION : Ellipse Framework vous est proposé en version beta (d'évaluation) afin de vous permettre d'évaluer ce framework. Infini Software se dégage de toutes responsabilités relatives à l'utilisation de ce framework. De plus, Infini Software ne pourra nullement être tenu responsable de l'utilisation des informations présentes dans ces tutoriaux.

Dominique LIARD - © 2007..2010 SARL Infini Software - Tous droits réservés
Les autres marques et les noms de produits cités dans ces documents sont la propriété de leurs détenteurs respectifs.