Wersje środowiska wykonawczego: | Flash Player 9, AIR 1.0, Flash Lite 4 |
new
i można im dynamicznie przypisywać właściwości. Obiekty można również tworzyć poprzez przypisywanie obiektowi literału, jak w poniższym przykładzie:
var obj:Object = {a:"foo", b:"bar"}
Wszystkie klasy, które nie deklarują jawnej klasy podstawowej rozszerzają wbudowaną klasę Object.
Klasy Object można użyć do utworzenia tablic skojarzeniowych. W swoim założeniu tablica skojarzeniowa to instancja klasy Object, gdzie każda para klucz - wartość jest reprezentowana przez właściwość i jej wartość. Warto jest również korzystać z typu danych Object w przypadku deklarowania tablicy skojarzeniowej ze względu na literał obiektu, za pomocą którego można zapełnić tę tablicę (ale tylko w momencie jej deklarowania). Poniższy przykład ilustruje tworzenie tablicy skojarzeniowej za pomocą literału obiektu, udostępnienie elementów za pomocą operatora dot oraz operatora dostępu do tablicy, a następnie dodanie nowej pary klucz - wartość poprzez utworzenie nowej właściwości:
var myAssocArray:Object = {fname:"John", lname:"Public"}; trace(myAssocArray.fname); // John trace(myAssocArray["lname"]); // Public myAssocArray.initial = "Q"; trace(myAssocArray.initial); // Q
Narzędzie ActionScript 3.0 udostępnia dwa rodzaje dziedziczenia: dziedziczenie klasy oraz dziedziczenie prototypu:
- Dziedziczenie klasy to podstawowy mechanizm dziedziczenia, który obsługuje dziedziczenie właściwości stałych. Właściwość stałą może stanowić zmienna, stała lub metoda deklarowana jako część definicji klasy. Każda definicja klasy jest wówczas reprezentowana za pomocą specjalnego obiektu klasy, który przechowuje informacje dotyczące tej klasy.
- Dziedziczenie prototypu - to jedyny mechanizm dziedziczenia udostępniony we wcześniejszych wersjach narzędzia ActionScript, który stanowi alternatywę dla mechanizmu dziedziczenia oferowanego w narzędziu ActionScript 3.0. Każda klasa posiada skojarzony obiekt prototypu, a właściwości obiektu prototypu są udostępniane dla wszystkich instancji klasy. Każda tworzona instancja klasy posiada odwołanie do obiektu prototypu swojej klasy, który służy jako łącze między instancją a skojarzonym obiektem prototypu tej klasy. Jeśli w środowisku wykonawczym w instancji klasy nie można znaleźć właściwości, obiekt delegowany, który stanowi obiekt prototypu klasy, sprawdzany jest pod kątem tej właściwości. Jeśli obiekt prototypu nie zawiera tej właściwości, proces sprawdzania delegowanego obiektu prototypu jest konsekwentnie kontynuowany na coraz wyższych poziomach hierarchii, do momentu aż właściwość nie zostanie znaleziona przez środowisko wykonawcze Flash.
Jak pokazano w poniższym przykładzie, istnieje możliwość współistnienia obydwu mechanizmów dziedziczenia klasy oraz prototypu:
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
Za pomocą funkcji (a nie klas) można tworzyć niestandardowe prototypowe drzewa dziedziczenia. Za pomocą klas można utworzyć drzewo dziedziczenia prototypu, które będzie odzwierciedlać drzewo dziedziczenia klas. Jednakże ponieważ obiekty prototypu są dynamiczne, można w środowisku wykonawczym dodawać lub usuwać właściwości oparte na prototypie.
Powiązane elementy interfejsu API
Właściwość | Zdefiniowane przez | ||
---|---|---|---|
constructor : Object
Odwołanie do obiektu klasy lub funkcji konstruktora, dotyczące danej instancji obiektu. | Object | ||
prototype : Object [statyczny]
Odwołanie do obiektu prototypu klasy lub obiektu funkcji. | Object |
Metoda | Zdefiniowane przez | ||
---|---|---|---|
Object()
Tworzy obiekt Object i zapisuje odwołanie do metody konstruktora obiektu we właściwości constructor obiektu. | Object | ||
Wskazuje, czy dla obiektu zdefiniowano określoną właściwość. | Object | ||
Wskazuje, czy instancja klasy Object należy do łańcucha prototypów obiektu określonego jako parametr. | Object | ||
Wskazuje, czy określona właściwość istnieje i jest przeliczalna. | Object | ||
Ustawia dostępność właściwości dynamicznej używanej w pętlach. | Object | ||
Zwraca ciąg reprezentujący obiekt — sformatowany zgodnie z konwencjami właściwymi dla ustawień regionalnych. | Object | ||
Zwraca ciąg reprezentujący określony obiekt. | Object | ||
Zwraca pierwotną wartość dla określonego obiektu. | Object |
constructor | właściwość |
public var constructor:Object
Wersje środowiska wykonawczego: | Flash Player 9, Flash Lite 4, Flash Player 9, AIR 1.0 |
Odwołanie do obiektu klasy lub funkcji konstruktora, dotyczące danej instancji obiektu. Jeśli obiekt stanowi instancję klasy, właściwość constructor
udostępnia odwołanie do obiektu klasy. Jeśli obiekt jest tworzony za pomocą konstruktora funkcji, właściwość constructor
udostępnia odwołanie do funkcji konstruktora. Należy pamiętać, że funkcja konstruktora i metoda konstruktora klasy to dwa różne pojęcia. Funkcja konstruktora to obiekt Function używany do tworzenia obiektów, stanowiący alternatywę dla słowa kluczowego class
w przypadku definiowania klas.
Użycie słowa kluczowego class
w celu zdefiniowania klasy spowoduje, że obiekt prototypu klasy zostanie przypisany do właściwości o nazwie constructor
udostępniającej odwołanie do obiektu klasy. Instancja klasy dziedziczy tę właściwość od obiektu prototypu. Na przykład za pomocą poniższego kodu można utworzyć nową klasę, A
oraz instancję klasy o nazwie 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
Zaawansowani użytkownicy mogą skorzystać ze słowa kluczowego function
zamiast słowa kluczowego class
w celu zdefiniowania obiektu Function, którego można użyć jako szablon do tworzenia obiektów. Taka funkcja jest nazywana funkcją konstruktora, ponieważ można jej używać w połączeniu z operatorem new
w celu tworzenia obiektów. Użycie słowa kluczowego function
do utworzenia funkcji konstruktora spowoduje, że obiekt jej prototypu zostanie przypisany do właściwości o nazwie constructor
, która udostępnia odwołanie do funkcji konstruktora. Użycie wówczas funkcji konstruktora w celu utworzenia obiektu sprawi, że obiekt będzie dziedziczył właściwość constructor
od obiektu prototypu funkcji konstruktora. Na przykład za pomocą poniższego kodu można utworzyć nową funkcję konstruktora f
oraz obiekt o nazwie myF
:
function f() {} trace(f.prototype.constructor); // function Function() {} trace(f.prototype.constructor == f); // true var myF = new f(); trace(myF.constructor == f); // true
Uwaga: Właściwość constructor
można zmieniać, co oznacza, że kod użytkownika może zmienić jej wartość za pomocą instrukcji przypisania. Nie zaleca się zmiany wartości właściwości constructor
. Jednakże w przypadku kodu korzystającego z wartości właściwości constructor
należy upewnić się, że wartość ta nie została zmieniona. Wartość można zmieniać tylko wówczas, gdy właściwość zostaje udostępniona przez obiekt prototypu (na przykład className.prototype.constructor
).
Jeśli możliwy jest dostęp do właściwości constructor
i kompilacja w trybie ścisłym, podczas kompilacji pojawi się błąd, ponieważ właściwość konstruktora jest zależna od obiektu prototypu, który jest obiektem środowiska wykonawczego. Jeśli używany jest tryb standardowy lub opis klasy zawiera słowo „dynamic”, kod działa bez generowania błędów.
Powiązane elementy interfejsu API
prototype | właściwość |
public static var prototype:Object
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Odwołanie do obiektu prototypu klasy lub obiektu funkcji. Właściwość prototype
jest tworzona automatycznie i dołączana do dowolnego tworzonego obiektu klasy lub funkcji. Ta właściwość jest statyczna ponieważ jest specyficzna dla tworzonej klasy lub funkcji. Na przykład podczas tworzenia klasy wartość właściwości prototype
jest udostępniania wszystkim instancjom klasy i można z niej korzystać tylko jak z właściwości klasy. Instancje klasy utworzonej przez użytkownika nie mają bezpośredniego dostępu do właściwości prototype
.
Obiekt prototypu klasy stanowi specjalną instancję tej klasy, która udostępnia mechanizm udostępniania stanu wszystkim instancjom klasy. Jeśli w środowisku wykonawczym w instancji klasy nie można znaleźć właściwości, obiekt delegowany, który stanowi obiekt prototypu klasy, sprawdzany jest pod kątem tej właściwości. Jeśli obiekt prototypu nie zawiera tej właściwości, proces sprawdzania delegowanego obiektu prototypu jest konsekwentnie kontynuowany na coraz wyższych poziomach hierarchii, do momentu aż właściwość nie zostanie znaleziona przez środowisko wykonawcze Flash.
Uwaga: W narzędziu ActionScript 3.0 dziedziczenie prototypu nie stanowi podstawowego mechanizmu dziedziczenia. Dziedziczenie klasy, które stanowi mechanizm dziedziczenia dla właściwości stałych w definicjach klasy, to podstawowy mechanizm dziedziczenia udostępniany przez narzędzie ActionScript 3.0.
Object | () | Konstruktor |
public function Object()
Wersje środowiska wykonawczego: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Tworzy obiekt Object i zapisuje odwołanie do metody konstruktora obiektu we właściwości constructor
obiektu.
hasOwnProperty | () | metoda |
AS3 function hasOwnProperty(name:String):Boolean
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Wskazuje, czy dla obiektu zdefiniowano określoną właściwość. Ta metoda zwraca wartość true
, jeśli dla obiektu docelowego istnieje właściwość zgodna z ciągiem określonym przez parametr name
. W odwrotnym przypadku metoda zwraca wartość false
. W przypadku poniższych typów właściwości metoda zwraca wartość true
dla obiektów będących instancjami klasy (w przeciwieństwie do obiektów klasy):
- Stałe właściwości instancji — zmienne, stałe lub metody są definiowane przez klasę obiektu i nie są statyczne;
- Dziedziczone stałe właściwości instancji — zmienne, stałe lub metody dziedziczone przez klasę obiektu;
- Właściwości dynamiczne — właściwości dodawane do obiektu po utworzeniu jego instancji (poza definicją tej klasy). Aby dodać właściwości dynamiczne, klasę definiującą obiekt należy deklarować wraz z słowem kluczowym
dynamic
.
W przypadku poniższych typów właściwości metoda zwraca wartość false
dla obiektów będących instancjami klasy:
- Właściwości statyczne — zmienne, stałe lub metody określone za pomocą słowa kluczowego static w klasie definiującej obiekt lub dowolnej jego nadklasie;
- Właściwości prototypu — właściwości zdefiniowane dla obiektu prototypu, który stanowi część łańcucha prototypów obiektu. W narzędziu ActionScript 3.0 dla dziedziczenia klasy nie wykorzystuje się łańcucha prototypów, który jednak jest dostępny jako alternatywna forma dziedziczenia. Na przykład, dla klasy Array dostępna jest metoda
valueOf()
, ponieważ znajduje się ona w obiekcieObject.prototype
będącym częścią łańcucha prototypów klasy Array. MetodyvalueOf()
można użyć dla instancji Array, jednakże wartością zwrócona dla tej instancji przez metodęhasOwnProperty("valueOf")
będzie wartośćfalse
.
Narzędzie ActionScript 3.0 udostępnia również obiekty klas będące bezpośrednią reprezentacją definicji klas. Jeśli metoda hasOwnProperty()
zostanie wywołana dla obiektów klasy, zwróci wartość true
tylko wówczas, gdy właściwość będzie stanowić właściwość statyczną określoną przez obiekt tej klasy. Jeśli, na przykład, użytkownik utworzy podklasę Array o nazwie CustomArray i określi w niej właściwość statyczną o nazwie foo
, wywołanie obiektu CustomArray.hasOwnProperty("foo")
spowoduje zwrócenie wartości true
. Jednakże wywołanie CustomArray.hasOwnProperty("DESCENDING")
dla właściwości statycznej DESCENDING
określonej przez klasę Array, spowoduje zwrot wartości false
.
Uwaga: Metody klasy Object są tworzone dynamicznie w prototypie klasy Object. Do ponownego zdefiniowania tej metody w podklasie Object, nie należy używać słowa kluczowego override
. Na przykład zamiast zastosowania słowa kluczowego override do klasy podstawowej, dla podklasy Object implementowana jest funkcja function hasOwnProperty():Boolean
.
Parametry
name:String — Właściwość obiektu.
|
Boolean — Jeśli obiekt docelowy posiada właściwość określoną przez parametr name , wówczas ta wartość to true ; w przeciwnym razie — false .
|
isPrototypeOf | () | metoda |
AS3 function isPrototypeOf(theClass:Object):Boolean
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Wskazuje, czy instancja klasy Object należy do łańcucha prototypów obiektu określonego jako parametr. Jeśli obiekt należy do łańcucha prototypów obiektu określonego parametrem theClass
, wówczas ta metoda zwraca wartość true
. Metoda zwraca wartość false
, jeśli obiekt docelowy nie należy do łańcucha prototypów obiektu theClass
lub jeśli parametr theClass
nie jest obiektem.
Uwaga: Metody klasy Object są tworzone dynamicznie w prototypie klasy Object. Do ponownego zdefiniowania tej metody w podklasie Object, nie należy używać słowa kluczowego override
. Na przykład zamiast zastosowania słowa kluczowego override do klasy podstawowej, dla podklasy Object implementowana jest funkcja function isPrototypeOf():Boolean
.
Parametry
theClass:Object — Klasa do której określony obiekt odwołuje się.
|
Boolean — Jeśli obiekt należy do łańcucha prototypów obiektu określonego parametrem theClass , wówczas ta wartość to true . W odwrotnym przypadku — false .
|
propertyIsEnumerable | () | metoda |
AS3 function propertyIsEnumerable(name:String):Boolean
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Wskazuje, czy określona właściwość istnieje i jest przeliczalna. Wartość true
oznacza, że właściwość istnieje i jest przeliczalna za pomocą pętli for..in
. Ta właściwość musi istnieć dla obiektu docelowego, ponieważ ta metoda nie sprawdza łańcucha prototypów obiektu docelowego.
Tworzone przez użytkownika właściwości są przeliczalne, w przeciwieństwie do wbudowanych właściwości, które z reguły nie są przeliczalne.
Uwaga: Metody klasy Object są tworzone dynamicznie w prototypie klasy Object. Do ponownego zdefiniowania tej metody w podklasie Object, nie należy używać słowa kluczowego override
. Na przykład zamiast zastosowania słowa kluczowego override do klasy podstawowej, dla podklasy Object implementowana jest funkcja function propertyIsEnumerable():Boolean
.
Parametry
name:String — Właściwość obiektu.
|
Boolean — Dla przeliczalnej właściwości określonej parametrem name , ta wartość to true . W odwrotnym przypadku — false .
|
setPropertyIsEnumerable | () | metoda |
public function setPropertyIsEnumerable(name:String, isEnum:Boolean = true):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Ustawia dostępność właściwości dynamicznej używanej w pętlach. Ta właściwość musi istnieć dla obiektu docelowego, ponieważ ta metoda nie sprawdza łańcucha prototypów obiektu docelowego.
Parametry
name:String — Właściwość obiektu.
| |
isEnum:Boolean (default = true ) — W przypadku ustawienia wartości false właściwość dynamiczna nie pojawi się w pętli for..in , a metoda propertyIsEnumerable() zwróci wartość false .
|
Powiązane elementy interfejsu API
toLocaleString | () | metoda |
public function toLocaleString():String
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Zwraca ciąg znaków reprezentujący obiekt — sformatowany zgodnie z konwencjami właściwymi dla ustawień narodowych.
W implementacji domyślnej ta metoda nie wykonuje formatowania właściwego dla ustawień narodowych i zwraca ten sam ciąg znaków, co toString()
. Jeśli to konieczne, dla podklas należy zastosować odpowiednią implementację uwzględniającą ustawienia narodowe.
Uwaga: Metody klasy Object są tworzone dynamicznie w prototypie klasy Object. Do ponownego zdefiniowania tej metody w podklasie Object, nie należy używać słowa kluczowego override
. Na przykład zamiast nadpisania klasy podstawowej dla podklasy Object implementowana jest funkcja function toLocaleString():String
.
String — Reprezentacja obiektu w postaci ciągu znaków sformatowanego zgodnie z lokalnymi konwencjami.
|
Powiązane elementy interfejsu API
toString | () | metoda |
public function toString():String
Wersje środowiska wykonawczego: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Zwraca ciąg znaków reprezentujący określony obiekt.
Uwaga: Metody klasy Object są tworzone dynamicznie w prototypie klasy Object. Do ponownego zdefiniowania tej metody w podklasie Object, nie należy używać słowa kluczowego override
. Na przykład zamiast nadpisania klasy podstawowej dla podklasy Object implementowana jest funkcja function toString():String
.
String — Ciąg znaków reprezentujący obiekt.
|
valueOf | () | metoda |
public function valueOf():Object
Wersje środowiska wykonawczego: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Zwraca pierwotną wartość dla określonego obiektu. Jeśli obiekt nie posiada wartości pierwotnej, wówczas zwracany jest sam obiekt.
Uwaga: Metody klasy Object są tworzone dynamicznie w prototypie klasy Object. Do ponownego zdefiniowania tej metody w podklasie Object, nie należy używać słowa kluczowego override
. Na przykład zamiast zastosowania słowa kluczowego override do klasy podstawowej, dla podklasy Object implementowana jest funkcja function valueOf():Object
.
Object — Pierwotna wartość obiektu lub sam obiekt.
|
Powiązane elementy interfejsu API
ObjectExample
i Circle
w celu ukazania dynamicznego charakteru klasy Object oraz sposobu, w jaki obiekty wartości można transformować na obiekty Shape, a następnie dodawać do stołu montażowego określonego przez współrzędne x/y.
Przykład ilustruje tworzenie obiektów wartości firstInitObj
oraz secondInitObj
. Niestandardowa klasa Circle
dopuszcza obiekt wartości i korzysta z niego podczas ustawiania swoich wewnętrznych właściwości zgodnie z tymi określonymi w obiekcie wartości.
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, 12:06 PM Z