Voila un proto qui ne va pas servir souvent : il permet de faire du polymorphisme paramétriquesur une fonction. En gros, sur un même appel de fonction, c'est une autre fonction qui va être appellée en fonction de la signature (nombre de paramètre et types des paramètres).

Si aucune signature "enregistrée" ne correspond à l'appel, la fonction par défaut est appelée.

[asfile]proto.function.polymorphism.as[/asfile]

Voici un exemple d'utilisation :

// Mes protos
#include "function.polymorphism.as"
// Fonction originale (affiche les parametres et leurs types)
myFunction = function(a,b,c) {
   trace("Typeof 'a' (" + a + ") : " + (typeof a));
   trace("Typeof 'b' (" + b + ") : " + (typeof b));
   trace("Typeof 'c' (" + c + ") : " + (typeof c));
   trace("");
}
// Fonction "polymorphique" (?)
// Fait le même chose que la première,
// avec un texte en plus pour la différencier
var myPolyFunction = function(a,b,c) {
   trace("Poly >> Typeof 'a' (" + a + ") : " + (typeof a));
   trace("Poly >> Typeof 'b' (" + b + ") : " + (typeof b));
   trace("Poly >> Typeof 'c' (" + c + ") : " + (typeof c));
   trace("");
}
// Si on appelle ma fonction avec 3 booléens
// je veux que ce soit myPolyFonction qui soit exécutée
myFunction.addPoly(myPolyFunction,Boolean,Boolean,Boolean);
// Appel de 'myFunction' avec 3 booléens
myFunction.call(this,true,true,true);
// Appel de 'myFunction' avec 3 types quelconques
myFunction.call(this,"LAlex",15,true);
// Je supprime le polymorphisme pour les 3 booléens
myFunction.removePoly(Boolean,Boolean,Boolean);
// J'essaie de rappeler 'myFunction' avec 3 booléens
myFunction.call(this,true,true,true);

La sortie affiche

Poly >> Typeof 'a' (true) : boolean
Poly >> Typeof 'b' (true) : boolean
Poly >> Typeof 'c' (true) : boolean


Typeof 'a' (LAlex) : string
Typeof 'b' (15) : number
Typeof 'c' (true) : boolean


Typeof 'a' (true) : boolean
Typeof 'b' (true) : boolean
Typeof 'c' (true) : boolean

::Télécharger le prototype::