2010-08-24 4 views
2

Supposons (à titre d'exemple) que j'ai une classe à laquelle je veux enregistrer tous les appels de méthode.Quelque chose comme PHP's __call() dans Actionscript

En PHP ceci peut être accompli rapidement et facilement avec __call(), ou en Python avec des décorateurs.

Quelle serait la manière la plus simple d'accomplir la même chose dans Actionscript 3?

Répondre

2

Étendez flash.utils.Proxy et utilisez l'espace de noms flash.utils.flash_proxy. Il existe des méthodes similaires à __get, __set et des méthodes pour les méthodes de suppression. Par exemple, la méthode __call est:

override flash_proxy function callProperty(name:*, ...rest):*; 

donc si une classe qui étend Proxy, vous faites:

var test:MyObject = new MyObject(); 
test.myMethodThatIsntDefined("param"); 

alors callProperty sera appelé et le nom sera réglé sur « myMethodThatIsntDefined » et " param "sera dans le tableau ... repos.

Le lien vers l'asdoc a une implémentation simple qui devrait vous aider à démarrer. J'utilise généralement la classe Proxy pour quelque chose comme une API. Par exemple, à l'époque, j'avais un wrapper API Flickr qui traduisait le nom de l'appel de fonction en un nom de méthode API dans l'API Flickr. Quelque chose comme:

flickr.galleriesGetPhotos(); 

et dans le callProperty je partagerai le premier mot pour obtenir le nom de l'API « de flickr.galleries.get_photos ». Les noms étaient différents à l'époque, je pense.

Questions connexes