Laufzeitversionen: | Flash Player 9, AIR 1.0, Flash Lite 4 |
new
-Operatorsyntax erstellt und können Eigenschaften dynamisch zugewiesen bekommen. Objekte können auch erstellt werden, indem, wie im folgenden Code, ein Objektliteral zugewiesen wird:
var obj:Object = {a:"foo", b:"bar"}
Alle Klassen, die nicht ausdrücklich eine Basisklasse deklarieren, erweitern die integrierte Object-Klasse.
Sie können die Object-Klasse einsetzen, um assoziative Arrays zu erstellen. Im Grunde ist ein assoziatives Array eine Instanz der Object-Klasse, bei der jedes Schlüssel-Werte-Paar durch eine Eigenschaft und deren Wert dargestellt wird. Ein weiterer Grund für die Deklaration eines assoziativen Arrays mit dem Object-Datentyp besteht darin, dass das assoziative Array auf diese Weise mithilfe von Objektliteralen mit Daten gefüllt werden kann (wenn auch nur unmittelbar bei seiner Erstellung). Im folgenden Beispiel wird ein assoziatives Array mit einem Objektliteral erstellt. Der anschließende Zugriff auf dessen Elemente erfolgt sowohl mit dem Punkt (.)- als auch mit dem Array-Zugriffsoperator. Anschließend wird durch Erstellen einer neuen Eigenschaft ein neues Schlüssel-Werte-Paar hinzugefügt:
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 verfügt über zwei Arten der Vererbung: Klassenvererbung und Prototypvererbung:
- Klassenvererbung ist die primäre Vererbungsart. Sie unterstützt die Vererbung fester Eigenschaften. Eine feste Eigenschaft ist eine Variable oder Methode, die als Teil einer Klassendefinition deklariert worden ist. Jede Klassendefinition wird nun durch ein spezielles Klassenobjekt repräsentiert, das Informationen über die Klasse speichert.
- Die Prototypvererbung war in früheren ActionScript-Versionen die einzige Vererbungsart. In ActionScript 3.0 dient sie als alternative Vererbungsform. Mit jeder Klasse ist ein Prototypobjekt verbunden und die Eigenschaften des Prototypobjekts werden von allen Instanzen der Klasse genutzt. Wenn eine Klasseninstanz erstellt wird, besitzt diese einen Verweis auf das Prototypobjekt ihrer Klasse, der als Verknüpfung zwischen der Instanz und ihrem verbundenen Klassenprototypobjekt dient. Wenn während der Laufzeit für eine Klasseninstanz eine bestimmte Eigenschaft nicht gefunden wird, wird das Delegate-Objekt, das identisch ist mit dem Klassenprototypobjekt, auf die Eigenschaft hin überprüft. Enthält das Prototypobjekt die Eigenschaft auch nicht, wird der Vorgang fortgesetzt, indem das Delegate-Objekt des Prototypobjekts in der nächsthöheren Hierarchieebene sucht, bis die Flash-Laufzeitumgebung die Eigenschaft findet.
Klassen- und Prototypvererbung können nebeneinander existieren, wie Sie im folgenden Beispiel sehen können:
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
Wenn Sie Funktionen anstelle von Klassen verwenden, können Sie eine eigene Prototypvererbungsstruktur erstellen. Mit Klassen wird die Prototypvererbungsstruktur in der Klassenvererbungsstruktur widergespiegelt. Da Prototypobjekte jedoch dynamisch sind, können Sie prototypgestützte Eigenschaften auch während der Laufzeit hinzufügen oder löschen.
Verwandte API-Elemente
Eigenschaft | Definiert von | ||
---|---|---|---|
constructor : Object
Ein Verweis auf das Klassenobjekt oder die Konstruktorfunktion für eine angegebene Objektinstanz. | Object | ||
prototype : Object [statisch]
Ein Verweis auf das Prototypobjekt einer Klasse oder eines Funktionsobjekts. | Object |
Methode | Definiert von | ||
---|---|---|---|
Object()
Erstellt ein Object-Objekt und speichert eine Referenz auf die Konstruktormethode in der constructor-Eigenschaft des Objekts. | Object | ||
Gibt an, ob für ein Objekt eine bestimmte Eigenschaft definiert wurde. | Object | ||
Gibt an, ob eine Instanz der Object-Klasse in der Prototypkette des Objekts vorhanden ist, das als Parameter angegeben wurde. | Object | ||
Gibt an, ob die angegebene Eigenschaft vorhanden ist und durchlaufen werden kann. | Object | ||
Legt die Verfügbarkeit einer dynamischen Eigenschaft für Schleifenoperationen fest. | Object | ||
Gibt die Stringdarstellung dieses Objekts zurück, formatiert entsprechend den Konventionen des Gebietsschemas. | Object | ||
Gibt das angegebene Objekt als String zurück. | Object | ||
Gibt den Grundwert des angegebenen Objekts zurück. | Object |
constructor | Eigenschaft |
public var constructor:Object
Laufzeitversionen: | Flash Player 9, Flash Lite 4, Flash Player 9, AIR 1.0 |
Ein Verweis auf das Klassenobjekt oder die Konstruktorfunktion für eine angegebene Objektinstanz. Ist ein Objekt eine Instanz einer Klasse, enthält die constructor
-Eigenschaft einen Verweis auf das Klassenobjekt. Wird ein Objekt mit einer Konstruktorfunktion erstellt, enthält die constructor
-Eigenschaft einen Verweis auf die Konstruktorfunktion. Verwechseln Sie eine Konstruktorfunktion jedoch nicht mit den Konstruktormethoden einer Klasse. Eine Konstruktorfunktion ist ein Function-Objekt, das zum Erstellen von Objekten verwendet wird, und stellt eine Alternative dar zum Verwenden des Schlüsselworts class
für das Definieren einer Klasse.
Wenn Sie eine Klasse mithilfe des Schlüsselworts class
definieren, wird das Prototypobjekt der Klasse einer Eigenschaft mit dem Namen constructor
zugewiesen, die einen Verweis auf das Klassenobjekt enthält. Eine Instanz der Klasse erbt diese Eigenschaft von dem Prototypobjekt. Der folgende Code erstellt beispielsweise eine neue Klasse, A
, sowie eine Klasseninstanz mit dem Namen 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
Fortgeschrittene Benutzer verwenden vielleicht anstelle des Schlüsselworts function
lieber das Schlüsselwort class
, um ein Function-Objekt zu definieren, das als Vorlage für die Erstellung von Objekten eingesetzt werden kann. Eine solche Funktion nennt man eine Konstruktorfunktion, da sie zusammen mit dem Operator new
verwendet werden kann, um Objekte zu erstellen. Wenn Sie eine Konstruktorfunktion mithilfe des Schlüsselworts function
definieren, wird das Prototypobjekt der Klasse einer Eigenschaft mit dem Namen constructor
zugewiesen, die einen Verweis auf die Konstruktorfunktion enthält. Wenn Sie die Konstruktorfunktion verwenden, um ein Objekt zu erstellen, erbt das Objekt die constructor
-Eigenschaft vom Prototypobjekt der Konstruktorfunktion. Der folgende Code erstellt beispielsweise eine neue Konstruktorfunktion, f
, sowie ein Objekt mit dem Namen myF
:
function f() {} trace(f.prototype.constructor); // function Function() {} trace(f.prototype.constructor == f); // true var myF = new f(); trace(myF.constructor == f); // true
Hinweis: Die constructor
-Eigenschaft ist änderbar, d. h., der Benutzercode kann ihren Wert durch eine Zuweisungsanweisung ändern. Es wird nicht empfohlen, den Wert der constructor
-Eigenschaft zu ändern, doch wenn Sie Code schreiben, der von dem Wert der constructor
-Eigenschaft abhängig ist, sollten Sie sicherstellen, dass der Wert nicht zurückgesetzt wird. Der Wert kann nur geändert werden, wenn über das Prototypobjekt auf die Eigenschaft zugegriffen wird (z. B. className.prototype.constructor
).
Wenn Sie auf die constructor
-Eigenschaft zugreifen und sie im Strict-Modus kompilieren, erhalten Sie einen Fehler beim Kompilieren, da die Konstruktoreigenschaft vom Prototypobjekt abhängt, das eine Laufzeiteinheit ist. Wenn Sie den Standardmodus verwenden oder wenn die Klassenbeschreibung „dynamic“ festlegt, wird der Code ausgeführt, ohne einen Fehler zu generieren.
Verwandte API-Elemente
prototype | Eigenschaft |
public static var prototype:Object
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Ein Verweis auf das Prototypobjekt einer Klasse oder eines Funktionsobjekts. Die prototype
-Eigenschaft wird automatisch erstellt und an die erstellten Klassen oder Funktionsobjekte angehängt. Diese Eigenschaft ist insofern statisch, als sie spezifisch für die Klasse oder Funktion gilt, die Sie erstellen. Wenn Sie beispielsweise eine benutzerdefinierte Klasse erstellen, wird der Wert der Eigenschaft prototype
von allen Instanzen der Klasse verwendet und ist nur als Klasseneigenschaft zugänglich. Instanzen Ihrer Klasse können die prototype
-Eigenschaft nicht direkt erreichen.
Das Prototypobjekt einer Klasse ist eine spezielle Instanz dieser Klasse, die eine Funktionalität bereitstellt, durch die ein Status von allen Instanzen einer Klasse genutzt werden kann. Wenn während der Laufzeit für eine Klasseninstanz eine bestimmte Eigenschaft nicht gefunden wird, wird das Delegate-Objekt, das identisch ist mit dem Klassenprototypobjekt, auf die Eigenschaft hin überprüft. Enthält das Prototypobjekt die Eigenschaft auch nicht, wird der Vorgang fortgesetzt, indem das Delegate-Objekt des Prototypobjekts in der nächsthöheren Hierarchieebene sucht, bis die Flash-Laufzeitumgebung die Eigenschaft findet.
Hinweis: In ActionScript 3.0 ist die Prototypvererbung nicht die primäre Vererbungsart. Vielmehr ist die Klassenvererbung, die die Vererbung fester Klassen in Klassendefinitionen unterbringt, die primäre Vererbungsart in ActionScript 3.0.
Object | () | Konstruktor |
public function Object()
Laufzeitversionen: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Erstellt ein Object-Objekt und speichert eine Referenz auf die Konstruktormethode in der Eigenschaft constructor
des Objekts.
hasOwnProperty | () | Methode |
AS3 function hasOwnProperty(name:String):Boolean
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Gibt an, ob für ein Objekt eine bestimmte Eigenschaft definiert wurde. Diese Methode gibt true
zurück, wenn das Zielobjekt eine Eigenschaft aufweist, die dem String entspricht, der durch den Parameter name
festgelegt ist; andernfalls gibt sie false
zurück. Bei den folgenden Eigenschaften gibt diese Methode für Objekte den Wert true
zurück, die Instanzen einer Klasse sind (im Gegensatz zu Klassenobjekten):
- Feste Instanzeigenschaften: Variablen, Konstanten oder Methoden, die von der Objektklasse definiert und nicht statisch sind;
- Geerbte feste Instanzeigenschaften: Variablen, Konstanten oder Methoden, die von der Objektklasse geerbt sind;
- Dynamische Eigenschaften: Eigenschaften, die zu einem Objekt hinzugefügt werden, nachdem es instanziiert ist (also außerhalb seiner Klassendefinition). Damit Sie dynamische Eigenschaften hinzufügen können, muss die Klasse, die das Objekt definiert, mit dem Schlüsselwort
dynamic
deklariert worden sein.
Bei den folgenden Eigenschaften gibt diese Methode für solche Objekte den Wert false
zurück, die Instanzen einer Klasse sind:
- Statische Eigenschaften: Variablen, Konstanten oder Methoden, die in der Klasse, die das Objekt definiert, oder einer übergeordneten Klasse mit dem Schlüsselwort „static“ definiert worden sind;
- Prototypeigenschaften: Eigenschaften, die für ein Prototypobjekt definiert wurden, das Teil der Prototypkette des Objekts ist. In ActionScript 3.0 wird die Prototypkette nicht für die Klassenvererbung eingesetzt, existiert aber weiterhin als alternative Vererbungsform. So kann beispielsweise eine Instanz der Array-Klasse auf die Methode
valueOf()
zugreifen, weil sie inObject.prototype
existiert, was wiederum Teil der Prototypkette der Array-Klasse ist. Obwohl SievalueOf()
für eine Array-Instanz verwenden können ist der Wert vonhasOwnProperty("valueOf")
für diese Instanzfalse
.
ActionScript 3.0 besitzt auch Klassenobjekte, die direkte Repräsentationen von Klassendefinitionen darstellen. Wird die Methode hasOwnProperty()
für Klassenobjekte aufgerufen, gibt sie nur dann den Wert true
zurück, wenn eine Eigenschaft eine statische Eigenschaft ist, die für das betreffende Klassenobjekt definiert worden ist. Wenn Sie beispielsweise eine Unterklasse von Array mit dem Namen „CustomArray“ erstellen und in CustomArray eine statische Eigenschaft mit dem Namen foo
definieren, gibt ein Aufruf von CustomArray.hasOwnProperty("foo")
den Wert true
zurück. Für die statische Eigenschaft DESCENDING
hingegen, die in der Array-Klasse definiert wurde, gibt ein Aufruf von CustomArray.hasOwnProperty("DESCENDING")
den Wert false
zurück.
Hinweis: Methoden der Object-Klasse werden für den Prototyp des Objekts dynamisch erstellt. Um diese Methode in eine Unterklasse von Object umzudefinieren, sollten Sie nicht das Schlüsselwort override
verwenden. So implementiert eine Unterklasse von Object beispielsweise function hasOwnProperty():Boolean
anstatt die Basisklasse per „override“ außer Kraft zu setzen.
Parameter
name:String — Die Eigenschaft des Objekts.
|
Boolean — Wenn die Eigenschaft beim Zielobjekt durch den Parameter name angegeben wird, lautet dieser Wert true ; andernfalls false .
|
isPrototypeOf | () | Methode |
AS3 function isPrototypeOf(theClass:Object):Boolean
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Gibt an, ob eine Instanz der Object-Klasse in der Prototypkette des Objekts vorhanden ist, das als Parameter angegeben wurde. Diese Methode gibt true
zurück, wenn sich das Objekt in der Prototypkette des Objekts befindet, das vom Parameter theClass
angegeben wird. Die Methode gibt false
nicht nur dann zurück, wenn das Zielobjekt in der Prototypkette des theClass
-Objekts fehlt, sondern auch dann, wenn der theClass
-Parameter kein Objekt ist.
Hinweis: Methoden der Object-Klasse werden für den Prototyp des Objekts dynamisch erstellt. Um diese Methode in eine Unterklasse von Object umzudefinieren, sollten Sie nicht das Schlüsselwort override
verwenden. So implementiert eine Unterklasse von Object beispielsweise function isPrototypeOf():Boolean
anstatt die Basisklasse per „override“ außer Kraft zu setzen.
Parameter
theClass:Object — Die Klasse, auf die das angegebene Objekt verweisen kann.
|
Boolean — Wenn sich das Objekt in der Prototypkette des Objekts befindet, das vom Parameter theClass angegeben wird, lautet der Wert true ; andernfalls false .
|
propertyIsEnumerable | () | Methode |
AS3 function propertyIsEnumerable(name:String):Boolean
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Gibt an, ob die angegebene Eigenschaft vorhanden ist und durchlaufen werden kann. Wenn true
, ist die Eigenschaft vorhanden und kann in einer for..in
-Schleife durchlaufen werden. Die Eigenschaft muss im Zielobjekt vorhanden sein, da diese Methode nicht die Prototypkette des Zielobjekts prüft.
Eigenschaften, die Sie erstellen, können durchlaufen werden, integrierte Eigenschaften können jedoch im Allgemeinen nicht durchlaufen werden.
Hinweis: Methoden der Object-Klasse werden für den Prototyp des Objekts dynamisch erstellt. Um diese Methode in eine Unterklasse von Object umzudefinieren, sollten Sie nicht das Schlüsselwort override
verwenden. So implementiert eine Unterklasse von Object beispielsweise function propertyIsEnumerable():Boolean
anstatt die Basisklasse per „override“ außer Kraft zu setzen.
Parameter
name:String — Die Eigenschaft des Objekts.
|
Boolean — Wenn die durch den Parameter name angegebene Eigenschaft durchlaufen werden kann, lautet dieser Werttrue ; andernfalls false .
|
setPropertyIsEnumerable | () | Methode |
public function setPropertyIsEnumerable(name:String, isEnum:Boolean = true):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Legt die Verfügbarkeit einer dynamischen Eigenschaft für Schleifenoperationen fest. Die Eigenschaft muss im Zielobjekt vorhanden sein, da diese Methode nicht die Prototypkette des Zielobjekts prüft.
Parameter
name:String — Die Eigenschaft des Objekts.
| |
isEnum:Boolean (default = true ) — Ist eine dynamische Eigenschaft auf false gesetzt, kommt sie in for..in -Schleifen nicht vor, und die Methode propertyIsEnumerable() gibt false zurück.
|
Verwandte API-Elemente
toLocaleString | () | Methode |
public function toLocaleString():String
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Gibt die Stringdarstellung dieses Objekts zurück, formatiert entsprechend den Konventionen des Gebietsschemas.
Die Standardimplementierung dieser Methode führt keine gebietsschemaspezifische Formatierung aus und gibt denselben String wietoString
zurück. Unterklassen sollten ggf. ihre eigenen, das Gebietsschema berücksichtigenden Implementierungen bereitstellen.
Hinweis: Methoden der Object-Klasse werden für den Prototyp des Objekts dynamisch erstellt. Um diese Methode in eine Unterklasse von Object umzudefinieren, sollten Sie nicht das Schlüsselwort override
verwenden. So implementiert eine Unterklasse von Object beispielsweise function toLocaleString():String
, anstatt die Basisklasse per „override“ außer Kraft zu setzen.
String — Eine Stringdarstellung dieses Objekts, lokalen Konventionen entsprechend formatiert.
|
Verwandte API-Elemente
toString | () | Methode |
public function toString():String
Laufzeitversionen: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Gibt das angegebene Objekt als String zurück.
Hinweis: Methoden der Object-Klasse werden für den Prototyp des Objekts dynamisch erstellt. Um diese Methode in eine Unterklasse von Object umzudefinieren, sollten Sie nicht das Schlüsselwort override
verwenden. So implementiert eine Unterklasse von Object beispielsweise function toString():String
anstatt die Basisklasse per „override“ außer Kraft zu setzen.
String — Die Stringdarstellung des Objekts.
|
valueOf | () | Methode |
public function valueOf():Object
Laufzeitversionen: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Gibt den Grundwert des angegebenen Objekts zurück. Wenn das Objekt keinen Grundwert aufweist, wird das Objekt selbst zurückgegeben.
Hinweis: Methoden der Object-Klasse werden für den Prototyp des Objekts dynamisch erstellt. Um diese Methode in eine Unterklasse von Object umzudefinieren, sollten Sie nicht das Schlüsselwort override
verwenden. So implementiert eine Unterklasse von Object beispielsweise function valueOf():Object
anstatt die Basisklasse per „override“ außer Kraft zu setzen.
Object — Der Grundwert des angegebenen Objekts oder das Objekt selbst.
|
Verwandte API-Elemente
ObjectExample
und Circle
der dynamische Charakter der Object-Klasse veranschaulicht. Außerdem wird gezeigt, wie Value-Objekte in Shape-Objekte umgewandelt und zur Bühne an den angegebenen x/y-Koordinaten hinzugefügt werden können.
Im folgenden Beispiel werden die Value-Objekte firstInitObj
und secondInitObj
erstellt. Die benutzerdefinierte Klasse Circle
akzeptiert das Value-Objekt, durchläuft es wiederholt und stellt seine entsprechenden internen Eigenschaften gemäß den im Value-Objekt definierten Werten ein.
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, 10:04 AM Z