Språköversikt

Objekten är kärnan i ActionScript 3.0-språket och de är grundstenarna i språket. Varje variabel som du deklarerar, varje funktion du skriver och varje klassinstans du skapar är ett objekt. Du kan tänka på ett ActionScript 3.0-program som en grupp objekt som utför åtgärder, svarar på händelser och kommunicerar med varandra.

Programmerare som är duktiga på objektorienterad programmering (OOP) i Java eller C++ tänker kanske på objekt som moduler som innehåller två sorters medlemmar: data som lagrats i medlemsvariabler eller egenskaper, och beteende som kan nås via metoder. ActionScript 3.0 definierar objekt på nästan samma sätt. I ActionScript 3.0 är objekt helt enkelt samlingar av egenskaper. Dessa egenskaper är behållare som kan innehålla inte bara data utan också funktioner eller andra objekt. Om en funktion bifogas till ett objekt på det här sättet, kallas den en metod.

ActionScript 3.0-definitionen kan verka lite egendomlig för programmerare som tidigare arbetat med Java eller C++, men i själva verket definierar man objekttyper med ActionScript 3.0-klasser på ungefär samma sätt som man definierar klasser i Java eller i C++. Skillnaden mellan de två definitionerna av objekt är viktig när man beskriver ActionScript-objektmodellen och andra avancerade ämnen, men i de flesta fall betyder termen egenskaper klassmedlemsvariabler i motsats till metoder. I referenshandbok för Adobe ActionScript 3.0 för Adobe Flash-plattformen används till exempel termen egenskaper om variabler eller get-/set-egenskaper. Här används termen metoder för att ange funktioner som är en del av en klass.

En liten skillnad mellan klasser i ActionScript och klasser i Java eller C++ är att i ActionScript är klasser inte bara abstrakta enheter. ActionScript-klasser representeras av klassobjekt som lagrar klassens egenskaper och metoder. Detta gör att man kan använda teknik som är helt främmande för Java- och C++-programmerare, till exempel att ta med programsatser eller körbar kod på den översta nivån i en klass eller ett paket.

En annan skillnad mellan klasserna ActionScript och Java eller C++ är att varje ActionScript-klass har något som kallas prototyp-objekt. I föregående versioner av ActionScript fungerade prototypobjekten, som kopplats ihop till prototypkedjor, kollektivt som grunden för hela klassarvshierarkin. I ActionScript 3.0 spelar prototypobjekten bara en liten roll i arvssystemet. Prototypobjektet kan fortfarande vara användbart som ett alternativ till statiska egenskaper och metoder om du vill dela ut en egenskap och dess värde till alla instanser av en klass.

Tidigare kunde avancerade ActionScript-programmerare direkt ändra prototypkedjan med speciella inbyggda språkelement. Nu när språket tillhandahåller en mera utvecklad implementering av ett klassbaserat programmeringsgränssnitt ingår många av dessa speciella språkelement, som __proto__ och __resolve, inte längre i språket. Optimeringar av den interna arvsmekanismen, som ger betydande prestandaförbättringar, förhindrar dessutom direktåtkomst till arvsmekanismen.