En ActionScript 3 beaucoup de développeurs ignorent ou oublient l'existence de l'objet prototype.
L'objet prototype reste un élément incontournable du langage et même si en AS3 Adobe a fait évoluer le concept pour optimiser les capacités de nos classes via une implémentation basée sur les "traits" il ne faut jamais oublier que l'ActionScript est basé sur les normes ECMAScript est reste avant tout un langage "Prototype Based".
Il est donc toujours possible d'utiliser à tout moment une objet prototype pour déclarer des méthodes sur une classe et profiter du dynamisme de ce standard.
En AS3 nous avons donc 2 manières pour créer des classes et implémenter leurs méthodes et propriétés avec des traits ou/et des prototypes.
Les traits
Toutes les propriétés définies dans les namespaces public, private, protected, internal ou custom dans une classe sont déclarées dans un trait.
Les traits sont des objets implémentés par Adobe pour augmenter les performances des classes dans l'AVM2 (virtual machine) du FlashPlayer et pour diminuer le temps utilisé pour appeler les propriétés d'un objet par rapport à l'utilisation classique basée sur une chaine de prototype.
A la base les traits permettent de copier les méthodes d'une super-classe vers sa classe enfant (de façon très optimisée) pour que l'appel de ces méthodes par la suite soit beaucoup plus rapide.
Les traits ne sont pas directement accessibles au niveau du code AS3 et fonctionnent en tache de fond dans nos applications. Dans la documentation AS3 nous pouvons lire un bon article sur le sujet dans la documentation AS3 officielle The traits object.
Il faut tout de même remarquer la note importante dans cet article qui indique que cette implémentation n'est pas garantie et peut changer ou même disparaitre dans les versions futures de l'ActionScript.
Nous pouvons tout de même rester tranquille à ce niveau là , l'AS3 est bien implémenté maintenant et il n'est pas prêt de disparaitre et dans tous les cas Adobe s'efforce toujours de garder une forte compatibilité d'un FlashPlayer à un autre.
Les traits sont donc très puissants mais en contre-partie limitent grandement certains comportements ECMAScript liés au dynamisme du langage.
En effet si l'on prend le temps de regarder de plus prêt l'implémentation des classes en AS3 certaines spécificités qui faisaient la force du langage ActionScript sont bridées comme par exemple la manipulation du scope des méthodes déclarées dans une classe basée sur les traits ou le fait qu'il est impossible de cibler la fonction constructeur d'une classe et donc il est impossible d'appliquer un apply() ou un call() dessus, etc.
Les prototypes
L'ActionScript depuis sa première version basée sur le standard ECMAScript (à partir de Flash 5) se base sur la norme ECMAScript 262 edition 3 et donc utilise des prototypes.
Chaque classe ActionScript possède un objet appelé "prototype", cette référence est un simple objet générique (donc dynamique) dans lequel il est possible de stoker des méthodes et des attributs qui seront communs à toutes les instances d'une même classe.

J'ai la chance depuis une petite semaine de travailler sous MAC OSX avec un tout nouveau MacBook Pro, c'est mon premier MAC donc je suis un peu comme un gosse qui découvre un nouveau joujou... Il m'a fallu tout se temps pour me mettre sur MAC et franchement là je peux dire qu'il n'y a rien à regretter. Quelques habitudes sur de longues années sur Windows sont encore à perdre mais le bilan reste à l'heure actuelle vraiment largement positif (bien plus que je ne l'espérais).
Derniers commentaires