« デザイナーのためのActionScript講座 ― 第5回:関数の仕組みを知る | メイン | 最大値と最小値の間を取るとき »

2007年11月10日

[連載] デザイナーのためのActionScript講座 ― 第6回:オブジェクトと関数

これまで変数には文字や数値を代入して使ってきましたが、ここからは少しレベルアップしていきたいと思います。
これまでより少し難しいかもしれませんが、慣れれば何てことはありません。

今回お話しするオブジェクト(Object)は ActionScript の根幹を成す基礎中の基礎なので必ず身につけましょう。

まずはオブジェクトを定義します。
定義する場所には変数を使います。
var obj = new Object();
これで変数"obj"に新しいオブジェクトを定義して代入しました。
以下の方法でもオブジェクトを作成できます。
var obj = {};
こちらの方が、記述の手間も少ないですし、new を使うより処理も軽いのでこちらを使う頻度の方が高いでしょう。

さて、オブジェクトの使い方ですが、オブジェクトには大きく分けて 2 種類の値、プロパティメソッドを持たせることができます。

変な例えですが、オブジェクトを何かに例えて説明するなら、ドラクエのキャラクターでしょうか。
プロパティは「名前」や「レベル」や「攻撃力」などのキャラクターのパラメーターで、メソッドはそのキャラクターが持つ動作的な要素、つまり「たたかう」や「魔法」、「にげる」にあたります。余計に分かりにくかったかな。
実際オブジェクトの方はもっと自由ですが。
要は複数の変数を持つことができるんです。
var obj = { x:10 , y:20 };
trace(obj);   // output : [object Object]
trace(obj.x); // output : 10
trace(obj.y); // output : 20
これは変数"obj"に"x"と"y"の 2 つのプロパティを持つオブジェクトを定義しています。
プロパティ"x"と"y"は、それぞれ"10"と"20"を代入しています。
var obj = {};
obj.x = 20;
trace(obj.x); // output : 20
このように定義した後からプロパティを追加することもできます。

次にメソッドです。
var obj = {
    method_1: function(){ trace("function method 1") } ,
    method_2: function(){ trace("function method 2") } 
  }
obj.method_1(); // output : function method 1
obj.method_2(); // output : function method 2
前回の内容を理解していれば、もうおわかりかと思いますが、メソッドとはオブジェクトが持つ関数です。
しかし、前回とは少し関数の定義の仕方が違いますよね。
実は関数には 2 通りの定義方法があります。
前回紹介したのは指定した関数名で関数を定義して、その関数名を使って実行するものでした。
function funcName()
{
  trace("Function");
}
funcName(); // output : Function
こんな感じに。
もうひとつは変数に関数を代入する方法です。
var func = function()
{
  trace("Function");
}
func(); // output : Function
つまり変数には関数も代入することができるのです。
この場合、関数そのものに名前を定義しないため、無名関数とも呼ばれます。
下記はもう少し変数への代入を分かりやすくしたものです。
function func_1()
{
  trace("Function");
}
var func_2 = func_1;
func_1(); // output : Function
func_2(); // output : Function
メソッドもプロパティと同様に、定義されたオブジェクトに追加することができます。
var obj = {};
obj.func = function()
{
  trace("Function");
}
obj.func(); // output : Function
つまり、メソッドもオブジェクトの持つプロパティの一種であることがわかります。
さらにオブジェクトのプロパティにオブジェクトを定義して、入れ子のようにすることも可能です。
var obj = {};
obj.prop = { name:"property" };
trace( obj );           // output : [object Object]
trace( obj.prop );      // output : [object Object]
trace( obj.prop.name ); // output : property
ActionScript は様々な機能があらかじめ定義されており、それは簡単に使うことができますが、 それらもすべて、このオブジェクトが元になっています。
冒頭にも書きましたが、オブジェクトはスクリプトを組む上でかなり重要な位置にありますので その仕組みをきちんと理解しておいてください。

PICUP : 代入について

詳しくは後日書きますが、変数に数値や文字列を代入することと、定義したオブジェクトを代入することは少し意味が違います。
実際はオブジェクトの参照先を代入していると言った方がいいかもしれません。
以下にそれを表したサンプルを書きます、これもいろいろと試してルールを把握してください。

var obj_1 = { x:10 };
var obj_2 = { x:10 };
var refer = obj_1; // 参照
var val = obj_1.x; // 代入

trace( refer==obj_1 ); // output : true
trace( obj_1==obj_2 ); // output : true
trace( obj_1.x ); // output : 10
trace( refer.x ); // output : 10
val = 20;
trace( obj_1.x ); // output : 10
trace( refer.x ); // output : 10
refer.x = 20;
trace( obj_1.x ); // output : 20
trace( refer.x ); // output : 20


トラックバック(0)

このブログ記事を参照しているブログ一覧: デザイナーのためのActionScript講座 ― 第6回:オブジェクトと関数

このブログ記事に対するトラックバックURL: http://system.seyself.com/mt-tb.cgi/459

コメントする


画像の中に見える文字を入力してください。

しばらく時間が経過すると、システム内部と表示されている文字内容に食い違いが発生するようなので、
投稿する前にページをリロードすることをお勧めします。
リロードしてもフォームの内容は維持されます。