Surveiller une fonction

[Résolu]
Signaler
Messages postés
21
Date d'inscription
mardi 3 août 2004
Statut
Membre
Dernière intervention
9 avril 2008
-
Messages postés
21
Date d'inscription
mardi 3 août 2004
Statut
Membre
Dernière intervention
9 avril 2008
-
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

Messages postés
694
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
8 janvier 2014
15
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)
Messages postés
694
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
8 janvier 2014
15
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.
Messages postés
21
Date d'inscription
mardi 3 août 2004
Statut
Membre
Dernière intervention
9 avril 2008

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
Messages postés
21
Date d'inscription
mardi 3 août 2004
Statut
Membre
Dernière intervention
9 avril 2008

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.