dynamic ステートメント

dynamic class className [ extends superClass ] [ implements interfaceName[, interfaceName... ] ] {
 // class definition here 
}

指定したクラスに基づくオブジェクトが、実行時にダイナミックプロパティを追加したり、ダイナミックプロパティにアクセスできるようにします。

クラス定義内およびクラスインスタンス内部でアクセスされるメンバーは、クラススコープ内のメンバーと比較されないので、ダイナミッククラスに対するタイプチェックは、非ダイナミッククラスの場合よりも緩くになります。ただし、その場合でもクラスメンバー関数の戻り値とパラメータのタイプに対しては、タイプチェックが実行されます。この動作は、MovieClip オブジェクトを操作する場合に特に便利です。ムービークリップにプロパティやオブジェクトを動的に追加する方法が数多くあります。具体的には、MovieClip.createEmptyMovieClip()MovieClip.createTextField()などです。

ダイナミッククラスのサブクラスもダイナミックになります。

次に示すように、オブジェクトを宣言するときには必ずタイプを指定します。

var x:MyClass = new MyClass();

次に示すように、オブジェクト宣言時に型を指定しない 場合、そのオブジェクトはダイナミックであると見なされます。

var x = new MyClass();

対応バージョン : ActionScript 2.0、Flash Player 6

次の例では、クラス Person2 が dynamic キーワードで宣言されていないので、このクラスで宣言されていない関数を呼び出すと、コンパイルエラーが発生します。

class Person2 { 
 var name:String; 
 var age:Number; 
 function Person2(param_name:String, param_age:Number) { 
 trace ("anything"); 
 this.name = param_name; 
 this.age = param_age; 
 } 
}

同じディレクトリ内にある FLA または AS ファイル内で、タイムラインのフレーム 1 に次の ActionScript を追加します。

// Before dynamic is added 
var craig:Person2 = new Person2("Craiggers", 32); 
for (i in craig) { 
 trace("craig." + i + " = " + craig[i]); 
} 
/* output:
craig.age = 32 
craig.name = Craiggers */

宣言されていない関数 dance を追加すると、次に示すように、エラーが生成されます。

trace(""); 
craig.dance = true; 
for (i in craig) { 
 trace("craig." + i + " = " + craig[i]); 
} 
/* output: **Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 14: There is no property with the name 'dance'. craig.dance = true; Total ActionScript Errors: 1 Reported Errors: 1 */

dynamic キーワードを Person2 クラスに追加します。最初の行は次のようになります。

dynamic class Person2 { 

コードを再びテストします。出力は次のようになります。

craig.dance = true craig.age = 32 craig.name = Craiggers

関連項目

class ステートメント


 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00001318.html