Surveiller une fonction

Résolu
karakvb Messages postés 21 Date d'inscription mardi 3 août 2004 Statut Membre Dernière intervention 9 avril 2008 - 24 sept. 2007 à 12:31
karakvb Messages postés 21 Date d'inscription mardi 3 août 2004 Statut Membre Dernière intervention 9 avril 2008 - 25 sept. 2007 à 12:10
Bonjour,
il y a t'il un moyen pour savoir lorsqu'une fonction javascript est appelée?
par exemple, j'ai un fichier js qui contient une fonction qui se charge de créer un element SVG :
                var group = svgDocument.createElementNS(svgns, "g");

J'aimerais, sans toucher au fichier, pouvoir savoir quand la fonction est appelée.
J'ai essayé en utilisant prototype pour appelé ma fonction a la place de celle de SVG:
            SVGDocument.prototype.createElementNS (namespace, type) { ... }

mais j'ai besoin que la vrai fonction s'execute quand meme...

Si quelqu'un a une idée ou une piste de recherche... Merci
--
karak

4 réponses

cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
25 sept. 2007 à 11:43
la fonction OLDcreateElementNS(ns,type) n'est pas reférencée dans le bon espace de noms (namespace) dans ta fonction, je dirai et javascript ne la trouve peut être pas, essayes :

SVGDocument.prototype.createElementNS = function (ns,type)
{
    alert(type);
    this.OLDcreateElementNS(ns,type);
}

sinon donnes le message d'erreur de la console (avec firefox et firebug)
3
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
24 sept. 2007 à 16:12
Je te propose un exemple de redéfinition du prototype d'un objet en gardant la référence à l'ancienne méthode :

// Objet Foo
function Foo() {
  this.x = 1;
}
// Définition de la méthode AddX initiale
Foo.prototype.AddX = function(y) {
  this.x += y;
}
// instanciation d'un Foo
obj = new Foo;
// Application de la méthode AddX initiale
obj.AddX(5);

// Résultat  alert("AddX initial " + obj.x); // Affiche 1 + 5 6

// Sauvegarde de la référence à l'ancienne méthode dans une nouvelle méthode du prototype de l'objet
Foo.prototype.oldAddX = Foo.prototype.AddX;

// Redéfinition de la méthode du prototype
Foo.prototype.AddX = function(y) {
  this.x += 4;
  this.oldAddX(5); // Appel de l'ancienne méthode
}

// instanciation d'un Foo
obj = new Foo;
// Application de la méthode AddX redéfinie (avec appel de l'ancienne)
obj.AddX(5);

// Résultatalert("AddX surchargé " + obj.x); // Affiche 1 + 4 + 5 10

Cette méthode ne fonctionne pas avec les objets dits prebuild (String, Array,...) et par conséquent avec leur méthode traditionnelles (length, replace...). Je ne sais d'ailleurs pas s'il est possible de rédefinir quoique ce soit avec les prebuild; on peut les surcharger mais probablement pas les redéfinir. Mais peut être que SVGDocument n'est pas considéré comme tel.
0
karakvb Messages postés 21 Date d'inscription mardi 3 août 2004 Statut Membre Dernière intervention 9 avril 2008
25 sept. 2007 à 10:02
Bonjour et merci pour ta reponse.

J'ai essayé de faire ca:

SVGDocument.prototype.OLDcreateElementNS = SVGDocument.prototype.createElementNS;

SVGDocument.prototype.createElementNS = function (ns,type)
{
    alert(type);
    svgDocument.OLDcreateElementNS(ns,type);
}
Et j'ai comme l'impression que ca boucle a l'infini...
--
karak
0
karakvb Messages postés 21 Date d'inscription mardi 3 août 2004 Statut Membre Dernière intervention 9 avril 2008
25 sept. 2007 à 12:10
Aaaah ca marche, j'avais pas fait attention au message d'erreur et en faite il manque juste le return lol.

SVGDocument.prototype.OLDcreateElementNS = SVGDocument.prototype.createElementNS;

SVGDocument.prototype.createElementNS = function (ns,type)
{
  return (this.OLDcreateElementNS(ns,type));
}

En tout cas merci de ton aide.
0
Rejoignez-nous