Versioni runtime: | Flash Player 9, AIR 1.0, Flash Lite 4 |
new
; le proprietà possono essere assegnate agli oggetti in modo dinamico. Gli oggetti possono essere creati anche assegnando un valore letterale di Object. Ad esempio:
var obj:Object = {a:"foo", b:"bar"}
Tutte le classi che non dichiarano una classe base esplicita estendono la classe Object incorporata.
Potete utilizzare la classe Object per creare array associativi. Un array associativo è un'istanza della classe Object e ciascuna coppia chiave-valore è rappresentata da una proprietà e dal relativo valore. Un altro motivo per dichiarare un array associativo usando il tipo di dati Object consiste nel fatto che è possibile utilizzare un valore letterale di oggetto per compilare un array associativo (ma solo nel momento in cui viene dichiarato). L'esempio seguente crea un array associativo mediante un valore letterale di oggetto, accede agli elementi sia mediante l'operatore dot sia mediante l'operatore di accesso agli array, quindi aggiunge una nuova coppia chiave-valore mediante la creazione di una nuova proprietà:
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 ha due tipi di ereditarietà: quella di classe e quella di prototipo.
- L'ereditarietà di classe è il meccanismo principale di ereditarietà e supporta l'ereditarietà delle proprietà fisse. Una proprietà fissa è una variabile, una costante o un metodo dichiarato come parte di una definizione di classe. Ogni definizione di classe è rappresentata da un oggetto Class speciale che memorizza le informazioni relative alla classe.
- L'ereditarietà di prototipo è l'unico meccanismo di ereditarietà presente nelle versioni precedenti di ActionScript e funge da alternativa all'ereditarietà di ActionScript 3.0. Per ogni classe esiste un oggetto prototipo associato, le cui proprietà sono condivise da tutte le istanze della classe. Quando viene creata un'istanza di classe, ha un riferimento all'oggetto prototipo della propria classe, che funge da collegamento tra l'istanza e l'oggetto prototipo di classe a essa associato. In fase di runtime, quando una proprietà non viene trovata in un'istanza di classe, la proprietà viene cercata nel delegato, cioè nell'oggetto prototipo della classe. Se l'oggetto prototipo non contiene la proprietà, il processo continua con la ricerca del delegato dell'oggetto prototipo in livelli sempre più elevati della gerarchia fino a quando il runtime Flash non trova la proprietà.
Entrambi i tipi di ereditarietà possono esistere contemporaneamente, come mostrato nell'esempio seguente:
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
Se utilizzate le funzioni anziché le classi, potete creare delle strutture di ereditarietà di prototipo personalizzate. Con le classi, la struttura di ereditarietà di prototipo rispecchia la struttura di ereditarietà di classe. Tuttavia, dal momento che gli oggetti prototipo sono dinamici, potete aggiungere ed eliminare le proprietà basate su prototipo in fase di runtime.
Altre informazioni
Elementi API correlati
Proprietà | Definito da | ||
---|---|---|---|
constructor : Object
Un riferimento all'oggetto classe o alla funzione di costruzione per una determinata istanza di oggetto. | Object | ||
prototype : Object [statico]
Un riferimento all'oggetto prototipo di un oggetto classe o funzione. | Object |
Metodo | Definito da | ||
---|---|---|---|
Object()
Crea un oggetto Object e memorizza un riferimento al metodo della funzione di costruzione dell'oggetto nella proprietà constructor dell'oggetto. | Object | ||
Indica se per un oggetto è definita una proprietà specifica. | Object | ||
Indica se un'istanza della classe Object si trova nella catena di prototipi dell'oggetto specificato come parametro. | Object | ||
Indica se la proprietà specificata esiste ed è enumerabile. | Object | ||
Imposta la disponibilità di una proprietà dinamica per le operazioni cicliche. | Object | ||
Restituisce la rappresentazione in formato stringa di questo oggetto, formattato in base alle convenzioni specifiche per le versioni localizzate. | Object | ||
Restituisce la rappresentazione in formato stringa dell'oggetto specificato. | Object | ||
Restituisce il valore di base dell'oggetto specificato. | Object |
constructor | proprietà |
public var constructor:Object
Versioni runtime: | Flash Player 9, Flash Lite 4, Flash Player 9, AIR 1.0 |
Un riferimento all'oggetto classe o alla funzione di costruzione per una determinata istanza di oggetto. Se un oggetto è un'istanza di una classe, la proprietà constructor
contiene un riferimento all'oggetto classe. Se un oggetto viene creato con una funzione di costruzione, la proprietà constructor
contiene un riferimento alla funzione di costruzione. Non confondere le funzioni di costruzione con i metodi di costruzione di una classe. Una funzione di costruzione è un oggetto Function utilizzato per creare oggetti ed è alternativo all'utilizzo della parola chiave class
per la definizione delle classi.
Se utilizzate la parola chiave class
per definire una classe, all'oggetto prototipo della classe viene assegnata una proprietà di nome constructor
che contiene un riferimento all'oggetto classe. Un'istanza della classe eredita questa proprietà dall'oggetto prototipo. Ad esempio, il codice seguente crea una nuova classe, A
, e un'istanza di classe di nome 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
Gli utenti più esperti possono decidere di utilizzare la parola chiave function
anziché la parola chiave class
per definire un oggetto Function utilizzabile come modello per la creazione degli oggetti. Una funzione di questo tipo viene definita funzione di costruzione perché può essere utilizzata in combinazione con l'operatore new
per creare gli oggetti. Se utilizzate la parola chiave function
per creare una funzione di costruzione, all'oggetto prototipo della classe viene assegnata una proprietà di nome constructor
che contiene un riferimento alla funzione di costruzione. Se quindi utilizzate la funzione di costruzione per creare un oggetto, l'oggetto eredita la proprietà constructor
dall'oggetto prototipo della funzione di costruzione. Ad esempio, il codice seguente crea una nuova funzione di costruzione, f
, e un oggetto di nome myF
:
function f() {} trace(f.prototype.constructor); // function Function() {} trace(f.prototype.constructor == f); // true var myF = new f(); trace(myF.constructor == f); // true
Nota: la proprietà constructor
è scrivibile, cioè il codice utente può modificare il valore con un'istruzione di assegnazione. Non è consigliabile modificare il valore della proprietà constructor
, tuttavia se scrivete del codice che dipende dal valore della proprietà constructor
, assicuratevi che il valore non venga reimpostato. Il valore può essere modificato solo quando si accede alla proprietà attraverso l'oggetto prototipo (ad esempio, className.prototype.constructor
).
Se accedete alla proprietà constructor
e compilate in modalità rigorosa, viene generato un errore in fase di compilazione perché la proprietà constructor dipende dall'oggetto protoype, che è un'entità della fase runtime. Se utilizzate la modalità standard oppure se la descrizione della classe specifica "dynamic", il codice viene eseguito senza errori.
Elementi API correlati
prototype | proprietà |
public static var prototype:Object
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Un riferimento all'oggetto prototipo di un oggetto classe o funzione. La proprietà prototype
viene creata automaticamente e associata a qualsiasi oggetto classe o funzione creato. Questa proprietà è di tipo statico ed è specifica della classe o della funzione creata. Se, ad esempio, create una classe, il valore della proprietà prototype
viene condiviso da tutte le istanze della classe ed è accessibile solo come proprietà della classe. Le istanze della classe non possono accedere direttamente alla proprietà prototype
.
L'oggetto prototipo di una classe è un'istanza speciale di tale classe che fornisce un meccanismo per condividere lo stato tra tutte le istanze di una classe. In fase di runtime, quando una proprietà non viene trovata in un'istanza di classe, la proprietà viene cercata nel delegato, cioè nell'oggetto prototipo della classe. Se l'oggetto prototipo non contiene la proprietà, il processo continua con la ricerca del delegato dell'oggetto prototipo in livelli sempre più elevati della gerarchia fino a quando il runtime Flash non trova la proprietà.
Nota: in ActionScript 3.0, l'ereditarietà di prototipo non è il meccanismo di ereditarietà principale. L'ereditarietà di classe, che comanda l'ereditarietà delle proprietà fisse nelle definizioni di classe, è il meccanismo di ereditarietà principale in ActionScript 3.0.
Object | () | Funzione di costruzione |
public function Object()
Versioni runtime: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Crea un oggetto Object e memorizza un riferimento al metodo della funzione di costruzione dell'oggetto nella proprietà constructor
dell'oggetto.
hasOwnProperty | () | metodo |
AS3 function hasOwnProperty(name:String):Boolean
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Indica se per un oggetto è definita una proprietà specifica. Questo metodo restituisce true
se all'oggetto target è associata una proprietà che corrisponde alla stringa specificata dal parametro name
; false
in caso contrario. I seguenti tipi di proprietà fanno in modo che questo metodo restituisca true
per gli oggetti che sono istanze di una classe (diversamente dagli oggetti classe):
- Proprietà di istanza fisse: variabili, costanti o metodi definiti dalla classe dell'oggetto e che non sono statici.
- Proprietà di istanza fisse non ereditate: variabili, costanti o metodi ereditati dalla classe dell'oggetto.
- Proprietà dinamiche: proprietà aggiunte a un oggetto dopo che per esso sono state create delle istanze (al di fuori della definizione di classe). Per aggiungere delle proprietà dinamiche, la classe di definizione dell'oggetto deve essere dichiarata con la parola chiave
dynamic
.
I seguenti tipi di proprietà fanno in modo che questo metodo restituisca false
per gli oggetti che sono istanze di una classe:
- Proprietà statiche: variabili, costanti o metodi definiti con la parola chiave static in una classe di definizione di un oggetto o in una qualunque delle sue superclassi.
- Proprietà prototype: proprietà definite su un oggetto prototipo che fa parte della catena di prototipi dell'oggetto. In ActionScript 3.0, la catena di prototipi non viene utilizzata per l'ereditarietà di classe, ma è presente come ereditarietà alternativa. Ad esempio, un'istanza della classe Array può accedere al metodo
valueOf()
perché esiste suObject.prototype
, che fa parte della catena di prototipi della classe Array. Anche se potete utilizzarevalueOf()
su un'istanza Array, il valore restituito dahasOwnProperty("valueOf")
per tale istanza èfalse
.
ActionScript 3.0 comprende anche degli oggetti classe che sono delle rappresentazioni dirette delle definizioni di classe. Quando viene chiamato sugli oggetti classe, il metodo hasOwnProperty()
restituisce true
solo se una proprietà è una proprietà statica definita in tale oggetto classe. Ad esempio, se create una sottoclasse di Array di nome CustomArray e definite una proprietà statica in CustomArray di nome foo
, una chiamata a CustomArray.hasOwnProperty("foo")
restituisce true
. Tuttavia, per la proprietà statica DESCENDING
definita nella classe Array, una chiamata a CustomArray.hasOwnProperty("DESCENDING")
restituisce false
.
Nota: i metodi della classe Object vengono creati dinamicamente sul prototipo di Object. Per ridefinire questo metodo in una sottoclasse di Object, non utilizzate la parola chiave override
. Ad esempio, una sottoclasse di Object implementa function hasOwnProperty():Boolean
anziché utilizzare un override della classe base.
Parametri
name:String — La proprietà dell'oggetto.
|
Boolean — Se all'oggetto target è associata la proprietà specificata dal parametro name , il valore è true , in caso contrario è false .
|
isPrototypeOf | () | metodo |
AS3 function isPrototypeOf(theClass:Object):Boolean
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Indica se un'istanza della classe Object si trova nella catena di prototipi dell'oggetto specificato come parametro. Il metodo restituisce true
se l'oggetto si trova nella catena di prototipi dell'oggetto specificato dal parametro theClass
. Il metodo restituisce false
non solo se l'oggetto target è assente dalla catena di prototipi dell'oggetto theClass
, ma anche se il parametro theClass
non è un oggetto.
Nota: i metodi della classe Object vengono creati dinamicamente sul prototipo di Object. Per ridefinire questo metodo in una sottoclasse di Object, non utilizzate la parola chiave override
. Ad esempio, una sottoclasse di Object implementa function isPrototypeOf():Boolean
anziché utilizzare un override della classe base.
Parametri
theClass:Object — La classe a cui può fare riferimento l'oggetto specificato.
|
Boolean — Se l'oggetto si trova nella catena di prototipi dell'oggetto specificato dal parametro theClass , il valore è true ; in caso contrario è false .
|
propertyIsEnumerable | () | metodo |
AS3 function propertyIsEnumerable(name:String):Boolean
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Indica se la proprietà specificata esiste ed è enumerabile. Se true
, la proprietà esiste e può essere enumerata in un ciclo for..in
. La proprietà deve esistere nell'oggetto target, poiché questo metodo non controlla la catena di prototipi dell'oggetto target.
Le proprietà create dall'utente sono enumerabili, mentre le proprietà incorporate, in genere, non lo sono.
Nota: i metodi della classe Object vengono creati dinamicamente sul prototipo di Object. Per ridefinire questo metodo in una sottoclasse di Object, non utilizzate la parola chiave override
. Ad esempio, una sottoclasse di Object implementa function propertyIsEnumerable():Boolean
anziché utilizzare un override della classe base.
Parametri
name:String — La proprietà dell'oggetto.
|
Boolean — Se la proprietà specificata dal parametro name è enumerabile, il valore è true ; in caso contrario è false .
|
setPropertyIsEnumerable | () | metodo |
public function setPropertyIsEnumerable(name:String, isEnum:Boolean = true):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Imposta la disponibilità di una proprietà dinamica per le operazioni cicliche. La proprietà deve esistere nell'oggetto target, poiché questo metodo non controlla la catena di prototipi dell'oggetto target.
Parametri
name:String — La proprietà dell'oggetto.
| |
isEnum:Boolean (default = true ) — Se impostata su false , la proprietà dinamica non viene visualizzata nei cicli for..in e il metodo propertyIsEnumerable() restituisce false .
|
Elementi API correlati
toLocaleString | () | metodo |
public function toLocaleString():String
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Restituisce la rappresentazione in formato stringa di questo oggetto, formattato in base alle convenzioni specifiche per le versioni localizzate.
L'implementazione predefinita di questo metodo non applica la formattazione in base alle convenzioni specifiche per le versioni localizzate e restituisce la stessa stringa come toString()
. Quando appropriato, le sottoclassi dovrebbero fornire la propria implementazione in grado di riconoscere la versione localizzata.
Nota: i metodi della classe Object vengono creati dinamicamente sul prototipo di Object. Per ridefinire questo metodo in una sottoclasse di Object, non utilizzate la parola chiave override
. Una sottoclasse di Object implementa, ad esempio, function toLocaleString():String
anziché utilizzare un override della classe base.
String — Rappresentazione in formato stringa di questo oggetto, formattato in base alle convenzioni per le versioni localizzate.
|
Elementi API correlati
toString | () | metodo |
public function toString():String
Versioni runtime: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Restituisce la rappresentazione in formato stringa dell'oggetto specificato.
Nota: i metodi della classe Object vengono creati dinamicamente sul prototipo di Object. Per ridefinire questo metodo in una sottoclasse di Object, non utilizzate la parola chiave override
. Ad esempio, una sottoclasse di Object implementa function toString():String
anziché utilizzare un override della classe base.
String — La rappresentazione in formato stringa dell'oggetto.
|
valueOf | () | metodo |
public function valueOf():Object
Versioni runtime: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Restituisce il valore di base dell'oggetto specificato. Se l'oggetto non ha un valore di base, viene restituito l'oggetto stesso.
Nota: i metodi della classe Object vengono creati dinamicamente sul prototipo di Object. Per ridefinire questo metodo in una sottoclasse di Object, non utilizzate la parola chiave override
. Ad esempio, una sottoclasse di Object implementa function valueOf():Object
anziché utilizzare un override della classe base.
Object — Il valore di base dell'oggetto o l'oggetto stesso.
|
Elementi API correlati
ObjectExample
e Circle
per dimostrare la natura dinamica della classe Object e come sia possibile trasformare gli oggetti valore in oggetti Shape e quindi aggiungerli nello stage in corrispondenza delle coordinate x/y specificate.
L'esempio crea gli oggetti valore firstInitObj
e secondInitObj
. La classe personalizzata Circle
accetta l'oggetto valore, ne esegue elaborazioni cicliche e ne imposta le proprietà interne su quelle definite nell'oggetto valore.
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, 02:44 PM Z