Körningsmiljöversioner: | Flash Player 9, AIR 1.0, Flash Lite 4 |
new
och kan ha dynamiskt tilldelade egenskaper. Du kan även skapa objekt genom att tilldela en objektlitteral, som i:
var obj:Object = {a:"foo", b:"bar"}
Alla klasser som inte deklarerar en explicit basklass som utökar den inbyggda Object-klassen.
Du kan använda Object-klassen när du skapar associativa arrayer. En associativ array är i princip en instans av klassen Object, och varje par av nyckel och värde representeras av en egenskap och dess värde. En annan orsak att deklarera en associativ array med hjälp av datatypen Object är att det sedan går att använda en objektlitteral för att fylla i den associativa arrayen (men bara samtidigt som den deklareras). I följande exempel skapas en associativ array med en objektlitteral, objekt används med både operatorn dot och operatorn för arrayåtkomst. Sedan läggs nya nyckel-värde-par till genom att en ny egenskap skapas:
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 har två typer av arv: klassarv och prototyparv:
- Klassarv är den grundläggande arvsmekanismen och stöder arv av fasta egenskaper. En fast egenskap är en variabel, konstant eller metod som är deklarerad som en del av en klassdefinition. Alla klassdefinitioner representeras nu av ett speciellt klassobjekt som spar information om klassen.
- Prototyparv är den enda arvsmekanismen i tidigare versioner av ActionScript och fungerar som en alternativ form av arv i ActionScript 3.0. Varje klass har ett associerat prototypobjekt och egenskaperna för det prototypobjektet delas av alla instanser av klassen. När en klassinstans skapas har den en referens till prototypobjektet för sin klass, vilket fungerar som en länk mellan instansen och dess associerade klassprototypobjekt. När en egenskap på en klassinstans inte hittas under körning kontrolleras om delegaten, som är klassprototypobjektet, har den egenskapen. Om prototypobjektet inte innehåller egenskapen fortsätter processen med kontroll av prototypobjektets delegat högre och högre upp i hierarkin tills egenskapen hittas.
Både klassarv och prototyparv kan samexistera, som i följande exempel:
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
Du kan skapa anpassade prototyparvsträd genom att använda funktioner i stället för klasser. Prototyparvsträdet speglar klassarvsträdet med klasser. Eftersom prototypobjekten är dynamiska kan du dock lägga till och ta bort prototypbaserade egenskaper vid körning.
Relaterade API-element
Egenskap | Definieras med | ||
---|---|---|---|
constructor : Object
En referens till klassobjektet eller konstruktorfunktionen för en given objektinstans. | Object | ||
prototype : Object [statisk]
En referens till prototypobjektet för en klass eller ett funktionsobjekt. | Object |
Metod | Definieras med | ||
---|---|---|---|
Object()
Skapar ett Object-objekt och sparar en referens till objektets konstruktormetod i objektets konstruktoregenskap. | Object | ||
Anger om det finns en egenskap angiven för ett objekt. | Object | ||
Anger om en instans av klassen Object finns i prototypkedjan för objektet som anges som parameter. | Object | ||
Anger om den angivna egenskapen finns och är uppräkningsbar. | Object | ||
Anger tillgänglighet för en dynamisk egenskap för slingåtgärder. | Object | ||
Returnerar det här objektets strängrepresentation, formaterad i enlighet med språkspecifika konventioner. | Object | ||
Returnerar det angivna objektets strängbeteckning. | Object | ||
Returnerar det angivna objektets primitiva värde. | Object |
constructor | egenskap |
public var constructor:Object
Körningsmiljöversioner: | Flash Player 9, Flash Lite 4, Flash Player 9, AIR 1.0 |
En referens till klassobjektet eller konstruktorfunktionen för en given objektinstans. Om ett objekt är en instans av en klass innehåller egenskapen constructor
en referens till klassobjektet. Om ett objekt skapas med en konstruktorfunktion innehåller egenskapen constructor
en referens till konstruktorfunktionen. Blanda inte ihop en konstruktorfunktion med en konstruktormetod i en klass. En konstruktorfunktion är ett Function-objekt som används när du skapar objekt och är ett alternativ till att använda nyckelordet class
när du definierar klasser.
Om du använder nyckelordet class
när du definierar en klass tilldelas klassens prototypobjekt en egenskap med namnet constructor
som innehåller en referens till klassobjektet. En instans av klassen ärver denna egenskap från prototypobjektet. Följande kod skapar till exempel en ny klass, A
, och en klassinstans med namnet 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
Avancerade användare kan välja att använda nyckelordet function
i stället för nyckelordet class
när de definierar ett Function-objekt som kan användas som en mall för nya objekt. En sådan funktion kallas för konstruktorfunktion eftersom du kan använda den i kombination med operatorn new
när du skapar objekt. Om du använder nyckelordet function
för att skapa en konstruktorfunktion tilldelas dess prototypobjekt en egenskap med namnet constructor
som innehåller en referens till konstruktorfunktionen. Om du sedan använder konstruktorfunktionen för att skapa ett objekt ärver objektet egenskapen constructor
från konstruktorfunktionens prototypobjekt. Följande kod skapar till exempel en ny konstruktorfunktion, f
och ett objekt med namnet myF
:
function f() {} trace(f.prototype.constructor); // function Function() {} trace(f.prototype.constructor == f); // true var myF = new f(); trace(myF.constructor == f); // true
Obs: Egenskapen constructor
är skrivbar, vilket betyder att användarkod kan ändra dess värde med en tilldelningssats. Vi rekommenderar inte att du ändrar värdet på egenskapen constructor
men om du skriver kod som beror på värdet av egenskapen constructor
bör du se till att värdet inte återställs. Värdet kan endast ändras när du kommer åt egenskapen från prototypobjektet (till exempel, className.prototype.constructor
).
Om du använder egenskapen constructor
och kompilerar i strikt läge, inträffar ett fel vid kompileringen eftersom egenskapen constructor beror på prototypobjektet som är en körtidsenhet. Koden körs utan fel när du använder standardläge eller klassbeskrivningen är "dynamic".
Relaterade API-element
prototype | egenskap |
public static var prototype:Object
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 9, AIR 1.0, Flash Lite 4 |
En referens till prototypobjektet för en klass eller ett funktionsobjekt. Egenskapen prototype
skapas automatiskt och kopplas till alla klasser och funktioner som du skapar. Egenskapen är statisk eftersom den är specifik för klassen eller funktionen som du skapar. Om du till exempel skapar en klass, delas värdet för egenskapen prototype
av alla klassens instanser och den är bara tillgänglig som en klassegenskap. Instanser av klassen har inte direktåtkomst till egenskapen prototype
.
Prototypobjektet för en klass är en speciell instans av klassen som har en mekanism som delar läget över alla instanser av en klass. När en egenskap på en klassinstans inte hittas under körning kontrolleras om delegaten, som är klassprototypobjektet, har den egenskapen. Om prototypobjektet inte innehåller egenskapen fortsätter processen med kontroll av prototypobjektets delegat högre och högre upp i hierarkin tills egenskapen hittas.
Obs! I ActionScript 3.0 är prototyparv inte en grundläggande arvsmekanism. Klassarv, som driver arvet av fasta egenskaper i klassdefinitioner är den grundläggande arvsmekanismen i ActionScript 3.0.
Object | () | Konstruktor |
public function Object()
Körningsmiljöversioner: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Skapar ett Object-objekt och sparar en referens till objektets konstruktormetod i objektets konstruktor
-egenskap.
hasOwnProperty | () | metod |
AS3 function hasOwnProperty(name:String):Boolean
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Anger om det finns en egenskap angiven för ett objekt. Metoden returnerar true
om målobjektet har en egenskap som matchar den sträng som anges av parametern name
. I annat fall returneras false
. Med följande egenskapstyper returnerar metoden true
för objekt som är instanser av en klass (till skillnad från klassobjekt):
- Fasta instansegenskaper – variabler, konstanter eller metoder som definieras av objektets klass och som inte är statiska;
- Ärvda fasta instansegenskaper – variabler, konstanter eller metoder som ärvs av objektets klass;
- Dynamiska egenskaper – egenskaper som läggs till i ett objekt efter att det har skapats (utanför dess klassdefinition). Om du vill lägga till dynamiska egenskaper måste objektets definierande klass deklareras med nyckelordet
dynamic
.
Med följande egenskapstyper returnerar metoden false
för objekt som är instanser av en klass:
- Statiska egenskaper – variabler, konstanter eller metoder som definierats med nyckelordet static i objektets definierande klass eller i någon av dess underklasser;
- Prototypegenskaper – egenskaper som har definierats på ett prototypobjekt som är en del av objektets prototypkedja. I ActionScript 3.0 används inte prototypkedjan för klassarv men den finns fortfarande som en alternativ form av arv. En instans av Array-klassen kan komma åt metoden
valueOf()
eftersom den finns påObject.prototype
, vilket är en del av prototypkedjan för Array-klassen. Även om du kan användavalueOf()
på en instans av Array är returvärdet avhasOwnProperty("valueOf")
för den instansenfalse
.
Det finns även klassobjekt i ActionScript 3.0 som är direkta representationer av klassdefinitioner. När metoden hasOwnProperty()
anropas på klassobjekt returnerar den endast true
om en egenskap är statisk egenskap som är definierad på det klassobjektet. Om du till exempel skapar en underklass till Array med namnet CustomArray och du definierar en statisk egenskap i CustomArray med namnet foo
kommer ett anrop till CustomArray.hasOwnProperty("foo")
att returnera true
. Med den statiska egenskapen DESCENDING
som är definierad i Array-klassen kommer dock ett anrop till CustomArray.hasOwnProperty("DESCENDING")
returnera false
.
Obs! Metoder till Object-klassen skapas dynamiskt på objektets prototyp. Om du vill definiera om metoden i en underklass till Object-klassen ska du inte använda nyckelordet override
. En underklass till Object-klassen implementerar till exempel function hasOwnProperty():Boolean
i stället för att åsidosätt basklassen.
Parametrar
name:String — Objektets egenskap.
|
Boolean — Om målobjektet har den egenskap som anges av parametern name , är värdet true , annars false .
|
isPrototypeOf | () | metod |
AS3 function isPrototypeOf(theClass:Object):Boolean
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Anger om en instans av klassen Object finns i prototypkedjan för objektet som anges som parameter. Metoden returnerar true
om objektet ingår i prototypkedjan för det objekt som anges av parametern theClass
. Metoden returnerar inte bara false
om objektet inte ingår i prototypkedjan för objektet theClass
, utan också om parametern theClass
inte är ett objekt.
Obs! Metoder till Object-klassen skapas dynamiskt på objektets prototyp. Om du vill definiera om metoden i en underklass till Object-klassen ska du inte använda nyckelordet override
. En underklass till Object-klassen implementerar till exempel function isPrototypeOf():Boolean
i stället för att åsidosätta basklassen.
Parametrar
theClass:Object — Klassen som det angivna objektet kan referera till.
|
Boolean — Om objektet finns i objektets prototypkedja som anges av parametern theClass är värdet true , annars är värdet false .
|
propertyIsEnumerable | () | metod |
AS3 function propertyIsEnumerable(name:String):Boolean
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Anger om den angivna egenskapen finns och är uppräkningsbar. Om den är true
finns egenskapen och den kan räknas upp i en for..in
-slinga. Egenskapen måste finnas på målobjektet eftersom metoden inte kontrollerar målobjektets prototypkedja.
De egenskaper du skapar är uppräkningsbara, men inbyggda egenskaper är i allmänhet inte uppräkningsbara.
Obs! Metoder till Object-klassen skapas dynamiskt på objektets prototyp. Om du vill definiera om metoden i en underklass till Object-klassen ska du inte använda nyckelordet override
. En underklass till Object-klassen implementerar till exempel function propertyIsEnumerable():Boolean
i stället för att åsidosätta basklassen.
Parametrar
name:String — Objektets egenskap.
|
Boolean — Om egenskapen som anges av parametern name är uppräkningsbar är värdet true , annars är värdet false .
|
setPropertyIsEnumerable | () | metod |
public function setPropertyIsEnumerable(name:String, isEnum:Boolean = true):void
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Anger tillgänglighet för en dynamisk egenskap för slingåtgärder. Egenskapen måste finnas på målobjektet eftersom metoden inte kontrollerar målobjektets prototypkedja.
Parametrar
name:String — Objektets egenskap.
| |
isEnum:Boolean (default = true ) — Om den är inställd på false visas inte den dynamiska egenskapen i for..in -slingor och metoden propertyIsEnumerable() returnerar false .
|
Relaterade API-element
toLocaleString | () | metod |
public function toLocaleString():String
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Returnerar det här objektets strängrepresentation, formaterad i enlighet med språkspecifika konventioner.
Standardimplementeringen av den här metoden använder inte språkspecifik formatering och returnerar samma sträng som toString()
. Underklasser bör ha sin egen lokalmedvetna implementering när det är lämpligt.
Obs! Metoder till Object-klassen skapas dynamiskt på objektets prototyp. Om du vill definiera om metoden i en underklass till Object-klassen ska du inte använda nyckelordet override
. En underklass till Object-klassen implementerar till exempel function toLocaleString():String
i stället för att åsidosätta basklassen.
String — En strängrepresentation av det här objektet, formaterad i enlighet med lokala konventioner.
|
Relaterade API-element
toString | () | metod |
public function toString():String
Körningsmiljöversioner: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Returnerar det angivna objektets strängbeteckning.
Obs! Metoder till Object-klassen skapas dynamiskt på objektets prototyp. Om du vill definiera om metoden i en underklass till Object-klassen ska du inte använda nyckelordet override
. En underklass till klassen Object implementerar till exempel function toString():String
i stället för att åsidosätta basklassen.
String — En strängbeteckning på objektet.
|
valueOf | () | metod |
public function valueOf():Object
Körningsmiljöversioner: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Returnerar det angivna objektets primitiva värde. Om objektet inte har något primitivt värde returneras själva objektet.
Obs! Metoder till Object-klassen skapas dynamiskt på objektets prototyp. Om du vill definiera om metoden i en underklass till Object-klassen ska du inte använda nyckelordet override
. En underklass till Object-klassen implementerar till exempel function valueOf():Object
i stället för att åsidosätt basklassen.
Object — Det primitiva värdet för det här objektet eller själva objektet.
|
Relaterade API-element
ObjectExample
och Circle
dynamiken hos Object-klassen och hur värdeobjekt kan omformas till Shape-objekt och sedan läggas till på scenen vid de angivna x/y-koordinaterna.
Exemplet skapar värdeobjekten firstInitObj
och secondInitObj
. Den anpassade klassen Circle
accepterar värdeobjektet och gör en slinga över objektet samtidigt som dess interna egenskaper ställs in till dem som anges i värdeobjektet.
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, 01:40 PM Z