ランタイムバージョン: | Flash Player 9, AIR 1.0, Flash Lite 4 |
new
演算子シンタックスを使用したコンストラクターで作成され、プロパティを動的に割り当てることができます。また、次のようにオブジェクトリテラルを割り当てて作成することもできます。
var obj:Object = {a:"foo", b:"bar"}
明示的な基本クラスを宣言していないクラスはすべて、ビルトインの Object クラスを拡張します。
Object クラスを使用して、結合配列を作成できます。基本的に、結合配列は Object クラスのインスタンスであり、キー値ペアはプロパティとその値という形式で表現されます。Object データタイプを使用して結合配列を宣言する別の理由は、そうすると、オブジェクトリテラルを使用して結合配列にデータを設定できるからです(ただし、宣言時のみ)。次の例では、オブジェクトリテラルを使用して結合配列を作成し、ドット演算子と配列アクセス演算子を両方とも使用して項目にアクセスします。その後、新しいプロパティを作成することで新しいキー値ペアを追加します。
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 には、クラス継承とプロトタイプ継承という 2 つの種類の継承があります。
- クラス継承 - 主要な継承メカニズムであり、固定プロパティの継承をサポートします。固定プロパティは、クラス定義の一部として宣言される変数、定数、またはメソッドです。クラス宣言はすべて、クラスに関する情報が保存されている特別なクラスオブジェクトで表されます。
- プロトタイプ継承 - 旧バージョンの ActionScript ではこれが唯一の継承メカニズムでしたが、ActionScript 3.0 では代替の継承形式として機能します。各クラスには関連付けられたプロトタイプオブジェクトがあり、プロトタイプオブジェクトのプロパティは、そのクラスのすべてのインスタンス間で共有されます。クラスインスタンスを作成した場合、インスタンスはそのクラスのプロトタイプオブジェクトへの参照を持っています。この参照は、インスタンスと、関連するクラスのプロトタイプオブジェクトとの間のリンクとして機能します。実行時に、クラスインスタンスにプロパティが見つからない場合は、委譲先であるクラスのプロトタイプオブジェクトにそのプロパティがないかどうかがチェックされます。プロトタイプオブジェクトにもない場合は、Flash ランタイムがそのプロパティを見つけるまで、プロトタイプオブジェクトの委譲先でチェックを行うという処理が階層の上位に向かって連続的に継続されます。
次の例に示すように、クラス継承とプロトタイプ継承は共存可能です。
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
クラスの代わりに関数を使用すると、カスタムプロトタイプ継承ツリーを作成できます。クラスを使用すると、プロトタイプ継承ツリーはクラス継承ツリーをミラーします。ただし、プロトタイプオブジェクトは動的であるため、プロトタイプベースのプロパティを実行時に追加および削除できます。
関連する API エレメント
プロパティ | 定義元 | ||
---|---|---|---|
constructor : Object
指定されたオブジェクトインスタンスのクラスオブジェクトまたはコンストラクター関数への参照です。 | Object | ||
prototype : Object [静的]
クラスまたは関数オブジェクトのプロトタイプオブジェクトへの参照です。 | Object |
メソッド | 定義元 | ||
---|---|---|---|
Object()
Object オブジェクトを作成し、そのオブジェクトのコンストラクターメソッドへの参照をオブジェクトの constructor プロパティに格納します。 | Object | ||
オブジェクトに指定されたプロパティが定義されているかどうかを示します。 | Object | ||
Object クラスのインスタンスが、パラメーターとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。 | Object | ||
指定されたプロパティが存在し、列挙できるかどうかを示します。 | Object | ||
ループ処理に対するダイナミックプロパティの可用性を設定します。 | Object | ||
ロケール固有の規則に従って書式設定された、このオブジェクトのストリング表現を返します。 | Object | ||
指定されたオブジェクトのストリング表現を返します。 | Object | ||
指定されたオブジェクトのプリミティブな値を返します。 | Object |
constructor | プロパティ |
public var constructor:Object
ランタイムバージョン: | Flash Player 9, Flash Lite 4, Flash Player 9, AIR 1.0 |
指定されたオブジェクトインスタンスのクラスオブジェクトまたはコンストラクター関数への参照です。オブジェクトがクラスのインスタンスの場合、constructor
プロパティはクラスオブジェクトへの参照を保持します。オブジェクトがコンストラクター関数で作成されている場合、constructor
プロパティはコンストラクター関数への参照を保持します。コンストラクター関数と、クラスのコンストラクターメソッドとを混同しないように注意してください。コンストラクター関数は、オブジェクトの作成に使用する Function オブジェクトで、クラスの定義に class
キーワードを使用することの代わりになります。
class
キーワードを使用してクラスを定義する場合、クラスのプロトタイプオブジェクトには、クラスオブジェクトへの参照を保持する constructor
という名前のプロパティが割り当てられます。クラスのインスタンスは、プロトタイプオブジェクトからこのプロパティを継承します。例えば、次のコードでは新しいクラス A
、および 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
上級ユーザーの場合は、オブジェクト作成用のテンプレートとして使える Function オブジェクトを定義するのに function
キーワードを使用し、class
キーワードを使用しない場合もあります。このような関数は、new
演算子と組み合わせてオブジェクトを作成できるため、コンストラクター関数と呼ばれています。function
キーワードを使用してコンストラクター関数を作成する場合、そのプロトタイプオブジェクトには、コンストラクター関数への参照を保持する constructor
という名前のプロパティが割り当てられます。次に、コンストラクター関数を使用してオブジェクトを作成すると、そのオブジェクトはコンストラクター関数のプロトタイプオブジェクトから constructor
プロパティを継承します。例えば、次のコードでは新しいコンストラクター関数 f
、および myF
という名前のオブジェクトを作成します。
function f() {} trace(f.prototype.constructor); // function Function() {} trace(f.prototype.constructor == f); // true var myF = new f(); trace(myF.constructor == f); // true
注意:constructor
プロパティは書き込み可能です。つまり、ユーザーコードで割り当てステートメントを使用して値を変更できます。constructor
プロパティの値の変更はお勧めしませんが、constructor
プロパティの値に依存したコードを書く場合は、その値がリセットされないようにする必要があります。プロトタイプオブジェクト(例えば、className.prototype.constructor
)を使用してプロパティにアクセスするときにのみ、この値を変更できます。
constructor
プロパティにアクセスしている場合、コンパイルを strict モードで実行するとコンパイル時にエラーが発生します。これは、ランタイムのエンティティであるプロトタイプオブジェクトに constructor プロパティが依存しているからです。standard モードを使用するか、クラスの記述で "dynamic" を指定した場合、そのコードはエラーにならずに動作します。
関連する API エレメント
prototype | プロパティ |
public static var prototype:Object
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 9, AIR 1.0, Flash Lite 4 |
クラスまたは関数オブジェクトのプロトタイプオブジェクトへの参照です。prototype
プロパティは自動的に作成され、作成したクラスまたは関数オブジェクトに割り当てられます。このプロパティは、作成したクラスまたは関数に固有であるという点で静的です。例えば、クラスを作成すると、prototype
プロパティの値は、そのクラスのすべてのインスタンスで共有され、クラスプロパティとしてのみアクセスできます。クラスのインスタンスは、prototype
プロパティに直接アクセスできません。
クラスのプロトタイプオブジェクトは、そのクラスの特別なインスタンスであり、クラスのすべてのインスタンス間で状態を共有するためのメカニズムを提供します。実行時に、クラスインスタンスにプロパティが見つからない場合は、委譲先であるクラスのプロトタイプオブジェクトにそのプロパティがないかどうかがチェックされます。プロトタイプオブジェクトにもない場合は、Flash ランタイムがそのプロパティを見つけるまで、プロトタイプオブジェクトの委譲先でチェックを行うという処理が階層の上位に向かって連続的に継続されます。
注意:ActionScript 3.0 では、プロトタイプ継承は主要な継承メカニズムではありません。ActionScript 3.0 での主要な継承メカニズムは、クラス定義の固定プロパティを継承するクラス継承です。
Object | () | コンストラクター |
public function Object()
ランタイムバージョン: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Object オブジェクトを作成し、そのオブジェクトのコンストラクターメソッドへの参照をオブジェクトの constructor
プロパティに格納します。
hasOwnProperty | () | メソッド |
AS3 function hasOwnProperty(name:String):Boolean
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 9, AIR 1.0, Flash Lite 4 |
オブジェクトに指定されたプロパティが定義されているかどうかを示します。true
が返されるのは、ターゲットオブジェクトに name
パラメーターで指定されたストリングに一致するプロパティがある場合です。それ以外の場合は false
が返されます。次のタイプのプロパティについては、オブジェクトがクラスオブジェクトではなく、クラスのインスタンスである場合に true
が返されます。
- 固定インスタンスプロパティ — オブジェクトのクラスで定義された、静的でない変数、定数、またはメソッド
- 継承された固定インスタンスプロパティ — オブジェクトのクラスが継承した変数、定数、またはメソッド
- 動的プロパティ — オブジェクトをインスタンス化した後に(クラス定義外で)オブジェクトに追加されたプロパティ 動的プロパティを追加するには、
dynamic
キーワードを使用して、オブジェクトを定義しているクラスを宣言する必要があります。
次のタイプのプロパティについては、オブジェクトがクラスのインスタンスである場合に false
が返されます。
- 静的プロパティ — オブジェクトを定義しているクラスまたはその任意のスーパークラスの静的キーワードを使用して定義された変数、定数、またはメソッド
- プロトタイププロパティ — オブジェクトのプロトタイプチェーンの一部であるプロトタイプに定義されたプロパティ ActionScript 3.0 では、プロトタイプチェーンはクラス継承には使用されませんが、継承の代替形式として存在しています。例えば、Array クラスのインスタンスは、
valueOf()
メソッドにアクセスできます。それは、そのインスタンスが Array クラスのプロトタイプチェーンの一部であるObject.prototype
に存在するためです。Array のインスタンスに対してvalueOf()
を使用できますが、そのインスタンスに対するhasOwnProperty("valueOf")
の戻り値はfalse
になります。
また、ActionScript 3.0 には、クラス定義の直接的な表現であるクラスオブジェクトがあります。hasOwnProperty()
メソッドをクラスオブジェクトに対して呼び出すと、プロパティがそのクラスオブジェクトに定義された静的プロパティである場合にのみ、true
が返されます。例えば、CustomArray という Array のサブクラスを作成し、CustomArray に foo
という静的プロパティを定義した場合、CustomArray.hasOwnProperty("foo")
を呼び出すと true
が返されます。ただし、Array クラスに定義した静的プロパティ DESCENDING
の場合、CustomArray.hasOwnProperty("DESCENDING")
を呼び出すと、false
が返されます。
注意:Object クラスのメソッドは、Object のプロトタイプに動的に作成されます。Object のサブクラスでこのメソッドを再定義する場合は、override
キーワードを使用しないでください。例えば、Object のサブクラスでは、基本クラスのオーバーライドを使用する代わりに function hasOwnProperty():Boolean
が実装されます。
パラメーター
name:String — オブジェクトのプロパティです。
|
Boolean — ターゲットオブジェクトに name パラメーターで指定されたプロパティがある場合、この値は true になり、それ以外の場合は false になります。
|
isPrototypeOf | () | メソッド |
AS3 function isPrototypeOf(theClass:Object):Boolean
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Object クラスのインスタンスが、パラメーターとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。このメソッドで true
が返されるのは、オブジェクトが theClass
パラメーターで指定されたオブジェクトのプロトタイプチェーン内にある場合です。false
が返されるのは、ターゲットオブジェクトが theClass
オブジェクトのプロトタイプチェーン内にない場合、および theClass
パラメーターがオブジェクトでない場合です。
注意:Object クラスのメソッドは、Object のプロトタイプに動的に作成されます。Object のサブクラスでこのメソッドを再定義する場合は、override
キーワードを使用しないでください。例えば、Object のサブクラスでは、基本クラスのオーバーライドを使用する代わりに function isPrototypeOf():Boolean
が実装されます。
パラメーター
theClass:Object — 指定したオブジェクトが参照する可能性があるクラスです。
|
Boolean — オブジェクトが theClass パラメーターで指定されたオブジェクトのプロトタイプチェーン内にある場合、この値は true になり、それ以外の場合は false になります。
|
propertyIsEnumerable | () | メソッド |
AS3 function propertyIsEnumerable(name:String):Boolean
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 9, AIR 1.0, Flash Lite 4 |
指定されたプロパティが存在し、列挙できるかどうかを示します。true
の場合、このプロパティが存在し、for..in
ループで列挙できます。このメソッドではターゲットオブジェクトのプロトタイプチェーンをチェックしないため、プロパティがターゲットオブジェクト上に存在している必要があります。
作成するプロパティは列挙できますが、ビルトインプロパティは通常列挙できません。
注意:Object クラスのメソッドは、Object のプロトタイプに動的に作成されます。Object のサブクラスでこのメソッドを再定義する場合は、override
キーワードを使用しないでください。例えば、Object のサブクラスでは、基本クラスのオーバーライドを使用する代わりに function propertyIsEnumerable():Boolean
が実装されます。
パラメーター
name:String — オブジェクトのプロパティです。
|
Boolean — name パラメーターで指定されたプロパティが列挙可能な場合、この値は true になり、それ以外の場合は false になります。
|
setPropertyIsEnumerable | () | メソッド |
public function setPropertyIsEnumerable(name:String, isEnum:Boolean = true):void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 9, AIR 1.0, Flash Lite 4 |
ループ処理に対するダイナミックプロパティの可用性を設定します。このメソッドではターゲットオブジェクトのプロトタイプチェーンをチェックしないため、プロパティがターゲットオブジェクト上に存在している必要があります。
パラメーター
name:String — オブジェクトのプロパティです。
| |
isEnum:Boolean (default = true ) — false に設定した場合、ダイナミックプロパティは for..in ループに現れず、メソッド propertyIsEnumerable() は false を返します。
|
関連する API エレメント
toLocaleString | () | メソッド |
public function toLocaleString():String
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 9, AIR 1.0, Flash Lite 4 |
ロケール固有の規則に従って書式設定された、このオブジェクトのストリング表現を返します。
このメソッドのデフォルトの実装では、ロケール固有の書式設定は行われず、toString()
と同じストリングが返されます。必要な場合は、ロケールに対応する独自の実装をサブクラスで提供する必要があります。
注意:Object クラスのメソッドは、Object のプロトタイプに動的に作成されます。Object のサブクラスでこのメソッドを再定義する場合は、override
キーワードを使用しないでください。例えば、Object のサブクラスでは、基本クラスのオーバーライドを使用する代わりに function toLocaleString():String
が実装されます。
String — ロケールの規則に従って書式設定された、このオブジェクトのストリング表現。
|
関連する API エレメント
toString | () | メソッド |
public function toString():String
ランタイムバージョン: | Flash Player 9, AIR 1.0, Flash Lite 4 |
指定されたオブジェクトのストリング表現を返します。
注意:Object クラスのメソッドは、Object のプロトタイプに動的に作成されます。Object のサブクラスでこのメソッドを再定義する場合は、override
キーワードを使用しないでください。例えば、Object のサブクラスでは、基本クラスのオーバーライドを使用する代わりに function toString():String
が実装されます。
String — オブジェクトのストリング表現です。
|
valueOf | () | メソッド |
public function valueOf():Object
ランタイムバージョン: | Flash Player 9, AIR 1.0, Flash Lite 4 |
指定されたオブジェクトのプリミティブな値を返します。このオブジェクトにプリミティブ値がない場合、オブジェクト自体が返されます。
注意:Object クラスのメソッドは、Object のプロトタイプに動的に作成されます。Object のサブクラスでこのメソッドを再定義する場合は、override
キーワードを使用しないでください。例えば、Object のサブクラスでは、基本クラスのオーバーライドを使用する代わりに function valueOf():Object
が実装されます。
Object — このオブジェクトのプリミティブ値、またはオブジェクト自体です。
|
関連する API エレメント
ObjectExample
クラスと Circle
クラスを使用して Object クラスの動的な特徴を紹介し、値オブジェクトを Shape オブジェクトに変換してステージ上の指定した x および y 座標に追加する方法を示しています。
この例では、値オブジェクト firstInitObj
と secondInitObj
を作成します。カスタムクラス Circle
は、値オブジェクトを受け入れ、対応する内部プロパティを値オブジェクトに定義されたプロパティに設定しながらループします。
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:34 AM Z