Forums : XPCom

Aller à la discussion :  Plus récente Plus ancienne

# Surcharge d'instance

Envoyé par : skygreg

Date : 12/04/2006 14:28

Bonjour,

j'aimerai surcharger (remplacer) une fonction d'un objet instancié. Un peu de code pour comprendre plus rapidement :

var dialog = Components.classes["@mozilla.org/progressdialog;1"].createInstance(Components.interfaces.nsIProgressDialog); 

Par exemple, je veux changer la fonction onStateChange :

dialog.onStateChange = function (a,b,c,d) { dump ("status change\n"); }

aucun message d'erreur, mais la fonction n'est pas changé :

dump(dialog.onStateChange);

affiche :

function onStateChange() {
   [native code]
}

Comment faire ? Merci.

# Re: Surcharge d'instance

Envoyé par : laurentj

Date : 12/04/2006 18:28

dans le cas de xpcom, tu ne peux pas il me semble..

Il te faut faire un composant qui hérite du composant initiale. Si ce dernier est en c++, il va te falloir le faire en c++. si c'est en js, ce sera en js etc...

# Re: Surcharge d'instance

Envoyé par : laurentj

Date : 12/04/2006 18:32

une autre manière de faire, est de faire un composant (en js par ex), qui implemente l'interface nsIProgressDialog. Ce composant instancierai dans son constructeur le composant que tu veux "surcharger", et dans chaque méthode de l'interface, appelerai la méthode de ce composant "parent", sauf pour celles dont tu veux changer le comportement.

# Re: Surcharge d'instance

Envoyé par : skygreg

Date : 14/04/2006 11:16

en effet, c'est une des erreurs classiques de Javascript : on ne peut pas surcharger une fonction contrairement à plein d'autres languages !! Vivement qu'on puisse scripter en python :-)

# Re: Surcharge d'instance

Envoyé par : laurentj

Date : 14/04/2006 14:37

ça n'a absolument rien à voir avec JS. En JS, tu peux tout à fait redefinir des méthodes. Seulement ce n'est pas possible quand les objets JS sont mappés sur des composants XPCOM (la faute à XPConnect certainement; reste à savoir si c'est un bug ou une feature :-))

# Re: Surcharge d'instance

Envoyé par : skygreg

Date : 14/04/2006 15:03

T'es sûr ?

http://weblogs.asp.net/bleroy/archive/2005/02/15/373815.aspx

# Re: Surcharge d'instance

Envoyé par : laurentj

Date : 14/04/2006 16:10

Ok, il parle de la surcharge avec des signatures différentes. Effectivement, ce n'est pas possible en JS (et de manière général, dans les langages non typés..). Moi je parlais de la surcharge "simple", de la redéfinition.

 var unObjet = {  foo : function(){ alert('original'); }  }
 
 //redefinition
 unObjet.foo = function(){ alert('redefini');};
 
 unObjet.foo() // affiche "redefini"

Ça fonctionne aussi si c'est une méthode du prototype de l'objet.

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.