2010-05-14 12 views
0

J'essaie quelque chose de configuration comme la programmation orientée aspect en Actionscript 3, essentiellement la seule chose que je dois être en mesure de faire est quelque chose comme ceci:Possibilité d'ajouter un EventListener à une fonction pour Actionscript 3?

SomeClass.getMethod("methodName").addEventListener(afterMethodExecuted, function() { 
    //run code 
}); 

De cette façon, je peux exécuter du code après (ou avant) n'importe quelle méthode dans n'importe quelle classe a couru, permettant de nombreuses nouvelles possibilités.

Comment dois-je mettre cela en œuvre?

Répondre

2

Vous pouvez écrire un wrapper sur une méthode. La classe BindUtils de la bibliothèque Flex fait exactement cela en utilisant le ChangeWatcher. Il le fait en enveloppant une propriété mais en ActionScript une méthode est juste une propriété.

Je suggère de lire le code de ces méthodes ($ FLEX_ROOT/sdks/4.0.0/frameworks/projects/framework/src /) pour avoir une idée de la façon dont vous pouvez faire la même chose. Vous pouvez également être intéressé par le FunctionReturnWatcher.

+0

Notez que la méthode donnée doit être mise à jour pour toutes les instances si je donne une classe plutôt qu'un objet (instance de classe). Est-ce que les classes que vous avez liées fonctionnent comme ça? – Tom

+0

Pour autant que je peux dire les classes que j'ai liées ne le feront pas. Vous pouvez probablement enrouler le constructeur de classe dans une méthode similaire pour vous assurer que chaque instance qu'il crée est enveloppée. (J'espère que cela a du sens - jetez un oeil ici http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/Object.html#constructor pour voir comment écraser le constructeur d'un objet) –

+0

Cela causera probablement une perte de performance significative cependant. – Tom