objectの厳密な定義はActionScriptやJavaScriptが準拠するECMA-262に書かれていますが、ここでは単純に「objectはプロパティと呼ばれるデータの集合」と理解しておけば十分でしょう。
例2
circle1 = {radius:50}
例えばメインタイムラインにこう書くと、名前が'radius'、値が50のプロパティを持つobject 'circle1'を_rootのプロパティとして定義することになります。
つまりswfムービーが再生されこのコードが実行されると、ビルトインMovieClip objectである_rootの1プロパティとして名前が'circle1'で値が{radius:50}というobject値であるobjectが作られます。
例3
circle2 = {center:{x:30, y:40}, radius:50}
こう書くと、名前が'x'、値が30のプロパティと、名前が'y'、値が40のプロパティを持つobjectを値とする、名前が'center'というプロパティと、50という数値を値とする'radius'という名前のプロパティを持つobject 'circle2'を_rootのプロパティとして定義することになります。
ここで、例3を例に取って「プロパティ」というものについて見てみることにしましょう。
この中で、ユーザが名付けたものが5つ('circle2', 'center', 'x', 'y', 'radius')登場します。ここで重要なのは、これらは全て何らかのオブジェクトのプロパティであるということです。そしてそれはこのコードに限った話ではなく、ASコード内に出てくる、ユーザが名付けたもの全てについて言えることで、それらは皆何らかのオブジェクトのプロパティです。
例3では、circle2は_rootというMovieClip objectのプロパティ、centerとradiusはcircle2というobjectのプロパティ、xとyはcenterというobjectのプロパティということです。
他の例で、例えばmc1というmovieclipがメインタイムラインに置かれていたとすると、mc1は_rootというMovieClip objectのプロパティであり、'mc1'というのはユーザが名付けたそのプロパティの名前です。そしてそのmc1というプロパティの値はやはりMovieClip objectであり、そのobjectは様々なビルトインプロパティ(_x, _alpha等)を持ち、さらにユーザ定義プロパティも持ち得ます。
このようにプロパティというのはあらゆるオブジェクトが持ち得るデータであるわけですが、そのデータのタイプがASでは8種類あります。さらに言えば、ASにおいて、ビルトイン、ユーザ定義、どちらでも、何らかの名前を持つものの値は、必ず以下のうちどれかのタイプに属します。
タイプ名
|
種別
|
取り得る値
|
undeifned
|
プリミティブ値
|
undefined
|
null
|
プリミティブ値
|
null
|
boolean
|
プリミティブ値
|
true 又は false
|
number
|
プリミティブ値
|
あらゆる数値、NaN、infinity、又は -infinity
|
string
|
プリミティブ値
|
あらゆる文字列
|
object
|
オブジェクト
|
object
|
function
|
オブジェクト
|
Function object
|
movieclip
|
オブジェクト
|
movieclip
|
ここで、プリミティブ値というのは、それ自体プロパティを持ち得ないものの値です。
例4
myStr = "hello";
myStr.x = 5;
1行目で、myStrはstringというタイプの値を持つ_rootのプロパティとして定義されました。しかし2行目を書いても、myStr.xはundefinedになります。つまり、プリミティブ値というのは、AS内で最もローレベルの値(それ以下には階層が存在し得ない値)と言って良いでしょう。
表が示すようにデータのタイプには8つの種類がありますが、、大きく分けると、プリミティブ値、object、function、movieclipの4種類とも言えます。つまりあらゆるプロパティの値は、その4種類のうちのどれかということになります。
以上、objectの定義とそのプロパティの取り得る値についてざっと説明してみましたが、この段階では何となくぼんやりとobjectとはこんなものかということだけ把握していただけば結構です。またobjectを定義するには例2,3の方法以外に、次のような方法もあるということをなんとなく頭に置いておいてください。
例5
circle1 = new Object();
circle1.radius = 50;
例6
circle2 = new Object();
circle2.center = new Object();
circle2.center.x = 30;
circle2.center.y = 40;
circle2.radius = 50;
例5は例2と、例6は例3と全く同意です。例5、6は冗長に見えますが、実はOOPを展開していく上ではこちらの方がより理にかなった方法と言えるのです。そのあたりは又後々見ていくことにします。
広義のオブジェクトにはASでは上の表にあるように、object, function, movieclipという3つのタイプが存在しますが、ではその中の2番目、functionについて次に見ていきましょう。