Versions du moteur d’exécution: | Flash Player 9, AIR 1.0, Flash Lite 4 |
new
et vous pouvez leur affecter des propriétés de façon dynamique. Vous pouvez également créer des objets en affectant un littéral d’objet, comme suit :
var obj:Object = {a:"foo", b:"bar"}
Toutes les classes qui ne déclarent pas de classe de base explicite étendent la classe Object intégrée.
Vous pouvez utiliser la classe Object pour créer des associative arrays. Sous sa forme de base, un tableau associatif est une occurrence de la classe Object et chaque paire clé/valeur est représentée par une propriété et sa valeur. Vous pouvez également déclarer un tableau associatif à l’aide du type de données Object pour la raison suivante : cela vous permet d’utiliser ensuite un littéral d’objet pour alimenter votre tableau associatif (uniquement au moment de la déclaration). L’exemple suivant crée un tableau associatif à l’aide d’un littéral d’objet, accède aux éléments à l’aide de l’opérateur point et d’accès au tableau, puis ajoute une nouvelle paire clé/valeur en créant une nouvelle propriété :
var myAssocArray:Object = {fname:"John", lname:"Public"}; trace(myAssocArray.fname); // John trace(myAssocArray["lname"]); // Public myAssocArray.initial = "Q"; trace(myAssocArray.initial); // Q
ActionScript 3.0 dispose de deux types d’héritage : par classe et par prototype :
- L’héritage de classe est le principal mécanisme d’héritage et prend en charge l’héritage des propriétés fixes. Une propriété fixe est une variable, une constante ou une méthode déclarée dans le cadre d’une définition de classe. Chaque définition de classe est à présent représentée par un objet de classe spécial qui mémorise les informations relatives à la classe.
- Héritage par prototype : il s’agissait de l’unique mécanisme d’héritage des versions précédentes d’ActionScript et constitue l’une des deux solutions d’héritage d’ActionScript 3.0. Chaque classe est associée à un objet prototype et les propriétés de l’objet prototype sont partagées par tous les héritages de la classe. Lorsqu’une classe est générée, elle contient une référence à l’objet prototype correspondant, qui sert de lien entre l’occurrence et l’objet prototype de classe associé. Lors de l’exécution, si une propriété ne figure pas dans une occurrence de classe, elle est recherchée dans le délégué, à savoir l’objet prototype de la classe. Si l’objet prototype ne contient pas la propriété, le processus se poursuit et le délégué de l’objet prototype effectue des recherches dans des niveaux de plus en plus élevés de la hiérarchie jusqu’à ce que le moteur d’exécution de Flash trouve la propriété.
L’héritage de classe et l’héritage de prototype peuvent coexister, comme illustré dans l’exemple suivant :
class A { var x = 1 prototype.px = 2 } dynamic class B extends A { var y = 3 prototype.py = 4 } var b = new B() b.x // 1 via class inheritance b.px // 2 via prototype inheritance from A.prototype b.y // 3 b.py // 4 via prototype inheritance from B.prototype B.prototype.px = 5 b.px // now 5 because B.prototype hides A.prototype b.px = 6 b.px // now 6 because b hides B.prototype
Si vous utilisez des fonctions au lieu de classes, vous pouvez générer des arborescences d’héritage de prototype personnalisées. Avec les classes, l’arborescence d’héritage de prototype reflète à l’identique l’arborescence d’héritage de classe. Cependant, les objets prototype étant dynamiques, vous pouvez ajouter et supprimer des propriétés associées aux prototypes lors de l’exécution.
Informations complémentaires
Eléments de l’API associés
Propriété | Défini par | ||
---|---|---|---|
constructor : Object
Référence à l’objet de classe ou à la fonction constructeur d’une occurrence donnée d’un objet. | Object | ||
prototype : Object [statique]
Référence à l’objet prototype d’un objet de classe ou fonction. | Object |
Méthode | Défini par | ||
---|---|---|---|
Object()
Crée un objet Object et stocke une référence à la méthode constructeur de l’objet dans la propriété constructor de ce dernier. | Object | ||
Indique si la propriété spécifiée d’un objet est définie. | Object | ||
Indique si une occurrence de la classe Object figure dans la chaîne de prototype de l’objet spécifié en tant que paramètre. | Object | ||
Indique si la propriété spécifiée existe et est énumérable. | Object | ||
Définit la disponibilité d’une propriété dynamique pour les opérations en boucle. | Object | ||
Renvoie la représentation de chaîne de cet objet, formatée selon les paramètres régionaux en vigueur. | Object | ||
Renvoie la représentation sous forme de chaîne de l’objet spécifié. | Object | ||
Renvoie la valeur primitive de l’objet spécifié. | Object |
constructor | propriété |
public var constructor:Object
Versions du moteur d’exécution: | Flash Player 9, Flash Lite 4, Flash Player 9, AIR 1.0 |
Référence à l’objet de classe ou à la fonction constructeur d’une occurrence donnée d’un objet. Si un objet est une occurrence de classe, la propriété constructor
contient une référence à l’objet de classe. Si un objet est créé par le biais d’une fonction constructeur, la propriété constructor
contient une référence à la fonction constructeur. Ne confondez pas une fonction constructeur avec une méthode constructeur de classe. Une fonction constructeur est un objet Function permettant de créer des objets et peut être utilisée au lieu du mot-clé class
pour définir des classes.
Si vous utilisez le mot-clé class
pour définir une classe, la propriété constructor
, qui contient une référence à l’objet de classe, est affectée à l’objet prototype correspondant. Une occurrence de la classe hérite de cette propriété à partir de l’objet prototype. Le code suivant crée par exemple une classe, A
, et une occurrence de classe, myA
:
dynamic class A {} trace(A.prototype.constructor); // [class A] trace(A.prototype.constructor == A); // true var myA:A = new A(); trace(myA.constructor == A); // true
Les utilisateurs chevronnés peuvent opter pour le mot-clé function
au lieu du mot-clé class
pour définir un objet Function, qui pourra servir de modèle de création d’objet. Ce type de fonction porte le nom de fonction constructeur, car vous pouvez l’utiliser en conjonction avec l’opérateur new
pour créer des objets. Si vous utilisez le mot-clé function
pour créer une fonction constructeur, la propriété constructor
, qui contient une référence à la fonction constructeur, est affectée à l’objet prototype correspondant. Si vous utilisez ensuite la fonction constructeur pour créer un objet, celui-ci hérite de la propriété constructor
à partir de l’objet prototype de la fonction constructeur. Le code suivant crée par exemple une fonction constructeur, f
, et un objet, myF
:
function f() {} trace(f.prototype.constructor); // function Function() {} trace(f.prototype.constructor == f); // true var myF = new f(); trace(myF.constructor == f); // true
Remarque : la propriété constructor
est accessible en écriture, ce qui signifie que la valeur du code utilisateur peut être modifiée par une instruction d’affectation. Il n’est pas recommandé de modifier la valeur de la propriété constructor
, mais si vous rédigez du code affecté par la valeur de la propriété constructor
, assurez-vous que la valeur n’est pas réinitialisée. La valeur ne peut être modifiée que lors d’un accès à la propriété par le biais de l’objet prototype (className.prototype.constructor
, par exemple).
Si vous accédez à la propriété constructor
et compilez en mode strict, vous obtenez une erreur lors de la compilation, car la propriété constructor dépend de l’objet prototype, ce qui est une entité d’exécution. Si vous utilisez mode standard ou si la description de la classe spécifie « dynamic », le code s’exécute sans générer d’erreur.
Eléments de l’API associés
prototype | propriété |
public static var prototype:Object
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Référence à l’objet prototype d’un objet de classe ou fonction. La propriété prototype
est créée automatiquement et est liée à tout objet de classe ou fonction que vous créez. Cette propriété est statique dans la mesure où elle est propre à la classe ou la fonction que vous créez. Par exemple, si vous créez une classe, la valeur de la propriété prototype
est partagée par toutes les occurrences de la classe et est accessible uniquement en tant que propriété de classe. Les occurrences de votre classe ne peuvent pas accéder directement à la propriété prototype
.
L’objet prototype d’une classe est une occurrence spéciale de cette classe, qui propose un mécanisme de partage d’état parmi toutes les occurrences d’une classe. Lors de l’exécution, si une propriété ne figure pas dans une occurrence de classe, elle est recherchée dans le délégué, à savoir l’objet prototype de la classe. Si l’objet prototype ne contient pas la propriété, le processus se poursuit et le délégué de l’objet prototype effectue des recherches dans des niveaux de plus en plus élevés de la hiérarchie jusqu’à ce que le moteur d’exécution de Flash trouve la propriété.
Remarque : dans ActionScript 3.0, l’héritage de prototype ne constitue pas le principal mécanisme d’héritage. Ce rôle incombe à l’héritage de classe, qui assure l’héritage des propriétés fixes dans les définitions de classe.
Object | () | Constructeur |
public function Object()
Versions du moteur d’exécution: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Crée un objet Object et stocke une référence à la méthode constructeur de l’objet dans la propriété constructor
de ce dernier.
hasOwnProperty | () | méthode |
AS3 function hasOwnProperty(name:String):Boolean
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Indique si la propriété spécifiée d’un objet est définie. Cette méthode renvoie true
si l’objet cible comporte une propriété qui correspond à la chaîne spécifiée par le paramètre name
et false
dans les autres cas. Les types de propriétés suivants forcent la méthode à renvoyer la valeur true
pour les objets qui sont des occurrences de classe, plutôt que des objets de classe :
- Propriétés d’occurrence fixes : variables, constantes ou méthodes définies par la classe de l’objet qui ne sont pas statiques.
- Propriétés d’occurrence fixes héritées : variables, constantes ou méthodes héritées par la classe de l’objet.
- Propriétés dynamiques : propriétés ajoutées à un objet après son instanciation (hors de la définition de classe). Pour ajouter des propriétés dynamiques, la classe de définition de l’objet doit être déclarée avec le mot-clé
dynamic
.
Les types de propriétés suivants forcent la méthode à renvoyer la valeur false
pour les objets qui sont des occurrences de classe :
- Propriétés statiques : variables, constantes ou méthodes définies avec le mot-clé statique dans la classe de définition d’un objet ou dans l’une de ses super-classes.
- Propriétés de prototype : propriétés définies pour un objet prototype appartenant à la chaîne de prototype de l’objet. Dans ActionScript 3.0, la chaîne de prototype n’est pas utilisée pour l’héritage de classe, mais demeure une autre forme d’héritage valide. Par exemple, une occurrence de la classe Array peut accéder à la méthode
valueOf()
parce qu’elle est associée àObject.prototype
, qui fait partie de la chaîne de prototype de la classe Array. Bien que vous puissiez utiliservalueOf()
sur une occurrence d’Array, la valeur renvoyée parhasOwnProperty("valueOf")
pour cette occurrence correspond àfalse
.
ActionScript 3.0 gère également les objets de classe, qui sont des représentations directes des définitions de classe. Si vous l’appelez sur un objet de classe, la méthode hasOwnProperty()
ne renvoie true
que si une propriété fait partie des propriétés statiques associées à l’objet de classe. Par exemple, si vous créez une sous-classe d’Array appelée CustomArray et que vous définissez une propriété statique dans CustomArray appelée foo
, tout appel de CustomArray.hasOwnProperty("foo")
renvoie true
. Cependant, pour la propriété statique DESCENDING
définie dans la classe Array, un appel de CustomArray.hasOwnProperty("DESCENDING")
renvoie false
.
Remarque : les méthodes de la classe Object sont créées dynamiquement sur le prototype correspondant. Pour redéfinir cette méthode dans une sous-classe d’Object, n’utilisez pas le mot-clé override
. Une sous-classe d’Object implémente par exemple function hasOwnProperty():Boolean
au lieu d’utiliser un remplacement de la classe de base.
Paramètres
name:String — Propriété de l’objet.
|
Boolean — Renvoie name si l’objet cible comporte la propriété spécifiée par le paramètre true , false dans tous les autres cas.
|
isPrototypeOf | () | méthode |
AS3 function isPrototypeOf(theClass:Object):Boolean
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Indique si une occurrence de la classe Object figure dans la chaîne de prototype de l’objet spécifié en tant que paramètre. Cette méthode renvoie true
si l’objet figure dans le chaînage de prototype de l’objet spécifié par le paramètre theClass
. La méthode renvoie false
si l’objet cible est absent de la chaîne de prototype de l’objet theClass
et si le paramètre theClass
n’est pas un objet.
Remarque : les méthodes de la classe Object sont créées dynamiquement sur le prototype correspondant. Pour redéfinir cette méthode dans une sous-classe d’Object, n’utilisez pas le mot-clé override
. Une sous-classe d’Object implémente par exemple function isPrototypeOf():Boolean
au lieu d’utiliser un remplacement de la classe de base.
Paramètres
theClass:Object — Classe à laquelle risque de se référer l’objet spécifié.
|
Boolean — Renvoie true si l’objet figure dans la chaîne de prototype de l’objet spécifié par le paramètre theClass , false dans le cas contraire.
|
propertyIsEnumerable | () | méthode |
AS3 function propertyIsEnumerable(name:String):Boolean
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Indique si la propriété spécifiée existe et est énumérable. Si la valeur est true
, la propriété existe et peut être énumérée dans une boucle for..in
. La propriété doit exister au niveau de l’objet cible dans la mesure où cette méthode ne vérifie pas la chaîne de prototype de l’objet cible.
Les propriétés que vous créez sont énumérables, contrairement aux propriétés intégrées qui ne le sont généralement pas.
Remarque : les méthodes de la classe Object sont créées dynamiquement sur le prototype correspondant. Pour redéfinir cette méthode dans une sous-classe d’Object, n’utilisez pas le mot-clé override
. Une sous-classe d’Object implémente par exemple function propertyIsEnumerable():Boolean
au lieu d’utiliser un remplacement de la classe de base.
Paramètres
name:String — Propriété de l’objet.
|
Boolean — Renvoie true si la propriété spécifiée par le paramètre name est énumérable, false dans le cas contraire.
|
setPropertyIsEnumerable | () | méthode |
public function setPropertyIsEnumerable(name:String, isEnum:Boolean = true):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Définit la disponibilité d’une propriété dynamique pour les opérations en boucle. La propriété doit exister au niveau de l’objet cible dans la mesure où cette méthode ne vérifie pas la chaîne de prototype de l’objet cible.
Paramètres
name:String — Propriété de l’objet.
| |
isEnum:Boolean (default = true ) — Si défini sur false , la propriété dynamique est ignorée dans les boucles for..in et la méthode propertyIsEnumerable() renvoie false .
|
Eléments de l’API associés
toLocaleString | () | méthode |
public function toLocaleString():String
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Renvoie la représentation de chaîne de cet objet, formatée selon les paramètres régionaux en vigueur.
Par défaut, l’implémentation de cette méthode n’entraîne pas le formatage selon les paramètres régionaux et renvoie la même chaîne que toString()
. Les sous-classes doivent fournir leur propre implémentation en fonction des paramètres régionaux lorsque cela est nécessaire.
Remarque : les méthodes de la classe Object sont créées dynamiquement sur le prototype correspondant. Pour redéfinir cette méthode dans une sous-classe d’Object, n’utilisez pas le mot-clé override
. Par exemple, une sous-classe d’Object implémente la méthode function toLocaleString():String
au lieu d’avoir recours au remplacement de la classe de base.
String — Une représentation de cet objet sous forme de chaîne, formatée conformément aux conventions locales.
|
Eléments de l’API associés
toString | () | méthode |
public function toString():String
Versions du moteur d’exécution: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Renvoie la représentation sous forme de chaîne de l’objet spécifié.
Remarque : les méthodes de la classe Object sont créées dynamiquement sur le prototype correspondant. Pour redéfinir cette méthode dans une sous-classe d’Object, n’utilisez pas le mot-clé override
. Par exemple, une sous-classe d’Object implémente function toString():String
au lieu d’utiliser un remplacement de la classe de base.
String — Représentation sous forme de chaîne de l’objet.
|
valueOf | () | méthode |
public function valueOf():Object
Versions du moteur d’exécution: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Renvoie la valeur primitive de l’objet spécifié. Si l’objet n’a pas de valeur primitive, il est lui-même renvoyé.
Remarque : les méthodes de la classe Object sont créées dynamiquement sur le prototype correspondant. Pour redéfinir cette méthode dans une sous-classe d’Object, n’utilisez pas le mot-clé override
. Une sous-classe d’Object implémente par exemple function valueOf():Object
au lieu d’utiliser un remplacement de la classe de base.
Object — Valeur primitive de l’objet ou l’objet lui-même.
|
Eléments de l’API associés
ObjectExample
et Circle
pour démontrer la nature dynamique de la classe Object et la façon dont les objets de valeur peuvent être transformés en objets Shape, puis ajoutés à la scène aux coordonnées x/y spécifiées.
L’exemple crée les objets de valeur firstInitObj
et secondInitObj
. La classe personnalisée Circle
accepte l’objet valeur et exécute une boucle sur ce dernier tout en définissant ses propriétés internes correspondantes sur celles qui sont définies dans l’objet de valeur.
package { import flash.display.Sprite; public class ObjectExample extends Sprite { public function ObjectExample() { var firstInitObj:Object = new Object(); firstInitObj.bgColor = 0xFF0000; firstInitObj.radius = 25; firstInitObj.xCenter = 25; firstInitObj.yCenter = 25; var firstCircle:Circle = new Circle(firstInitObj); addChild(firstCircle); firstCircle.x = 50; firstCircle.y = 50; var secondInitObj:Object = {bgColor:0xCCCCCC, radius:50, xCenter:50, yCenter:50}; var secondCircle:Circle = new Circle(secondInitObj); addChild(secondCircle); secondCircle.x = 100; secondCircle.y = 100; } } } import flash.display.Shape; class Circle extends Shape { public var bgColor:Number = 0xFFFFFF; public var radius:Number = 0; public var xCenter:Number = 0; public var yCenter:Number = 0; public function Circle(initObj:Object) { for(var i:String in initObj) { this[i] = initObj[i]; } draw(); } public function draw():void { graphics.beginFill(bgColor); graphics.drawCircle(xCenter, yCenter, radius); graphics.endFill(); } }
Tue Jun 12 2018, 09:30 AM Z