> je te renvoie à la doc pour l'explication des > traitshttp://help.adobe.com/fr_FR/ActionScript/3.0_ProgrammingAS3/WS5b3ccc5... >
oui ce link est parfait pour comprendre :) l'autre link que je vois rarement utilisé est celui de la spec du langage AS3 http://livedocs.adobe.com/specs/actionscript/3/as3_specification.html et pour les functions donc je recommande de lire 4.8 Function Closure http://livedocs.adobe.com/specs/actionscript/3/as3_specification33.html ---- A function closure is a function that is neither attached to another object nor defined as part of a class. Function closures are first-class objects that can be treated as a collection of properties or as callable objects. Contrast function closures with methods, which are functions that are attached to an object or an instance of a class. ---- 8.3 Function objects http://livedocs.adobe.com/specs/actionscript/3/as3_specification68.html où on peut voir un comment de Francis Cheng (le gars qui a écrit cette spec et apparemment est en train de l updater) ---- A class contains two traits objects, one for the class as a whole and another for the instances of the class. Static methods are stored in the former and instance methods are stored in the latter. This specification uses the term "trait" to mean a property or method that is fixed rather than dynamic. In other words, any method or variable that you define in your class definition, be it static or not, is a fixed property (aka trait). ---- en bref, une Function closure - est déclarée dans un slot (comme une variable) - a une durée de vie par rapport au scope d'execution - n'a pas vraiment de "this" une Function object - est déclarée dans un trait - a la durée de vie de la class (si static) ou de l'instance (si method) - se rappelle le "this" où elle a été déclarée (cf Function bound) donc pour revenir au probleme > C'est là que le problème se pose au final... le type int étant un > objet, ma fonction appelée utilise toujours la même valeur... Y a > t'il un moyen de transformer cet objet en scalaire ? ce n'est pas parce que la value serait object ou scalaire que la value "order" a toujours la meme valeur tu as une methode qui lance un loop et durant le loop tu assignes des function anonymes pour écouter des events au moment où tu assignes la function anonyme, la valeur "order" dépends du scope de la method mais quand ce loop se termine, et que la method ferme son scope ta function anonyme qui est toujours en mémoire ne peut plus référencer "order" pas parce que c'est un objet, mais parce que le scope de la methode est fermé et si tu adaptais ce meme code en JavaScript tu aurais le meme probleme un scope de methode et/ou de function n'est pas ouvert indéfiniment et donc de meme pour une variable locale déclarée dans ce scope "order" n'existe que pendant l'execution de la methode de plus, meme si tu passais cette variable en static au niveau de la classe tu ne pourrais pas avec une seule var maintenir les differentes valeurs de cette var cad si pendant le loop order=1, puis 2, puis 3, etc. alors que order est une var static au moment ou la function anonyme sera appelée order aura la derniere valeur qui lui a été assignée donc en gros pour maintenir plusieurs etats il te faut un object que ce soit une instance de classe ou un object de base ------- var storage:Array = []; storage[ order ] = new Something( order ); timerInterpretation.addEventListener(TimerEvent.TIMER, storage [order].displayCardsFromDrawings ) ------- quand l'event appelera la methode, celle-ci etant déclarée sur un object se rappelera son "this" et tu pourras faire un ---- var interpretedCardNumber:int = pickedCards[ this.order ]; ---- techniquement le "Something" peut etre une classe, un object litteral ou une function constructor var Something:Function = function( order:Number ) { this.order = order this.displayCardsFromDrawings = function( event:Event ):void { trace( this.order ); } } perso je dis que le probleme c'est pas d'utiliser la fonction anonyme ou d'etre scalaire ou pas, c'est de comment tu veux l'utiliser tu presentes ca comme une "limitation" du langage, mais non non tu l'utilises mal un object/instance peut maintenir un "etat" que ce soit dans le prototype ou le trait mais pas une fonction anonyme. zwetan --~--~---------~--~----~------------~-------~--~----~ Vous avez reçu ce message, car vous êtes abonné au groupe Groupe "FCNG" de Google Groupes. Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse [email protected] Pour résilier votre abonnement à ce groupe, envoyez un e-mail à l'adresse [email protected] Pour afficher d'autres options, visitez ce groupe à l'adresse http://groups.google.com/group/FCNG?hl=fr -~----------~----~----~----~------~----~------~--~---
