getDefinitionByName? [ActionScript3.0]

動的にクラス名を作成し、インスタンス生成するときとかに使えるのかな。

スクリプト

package minaco
{
	public class SampleClassA
	{
		public function SampleClassA():void
		{
			trace("SampleClassA / Constoract");
		}

		public function SampleMethod1():void
		{
			trace("SampleClassA / SampleMethod1");
		}

		public function SampleMethod2():void
		{
			trace("SampleClassA / SampleMethod2");
		}
	}
}
package minaco
{
	public class SampleClassB
	{
		public function SampleClassB():void
		{
			trace("SampleClassB / Constoract");
		}
	}
}

クラスインスタンスを生成する

import flash.utils.getDefinitionByName;

var sampleClassA:Class = Class(getDefinitionByName("minaco.SampleClassA"));
new sampleClassA();

結果

SampleClassA / Constoract

クラスインスタンスを作成する

import flash.utils.getDefinitionByName;

var sampleClassB:Class = Class(getDefinitionByName("minaco.SampleClassB"));
new sampleClassB();

結果

SampleClassB / Constoract

クラスメソッドを実行する

var sampleMethod:SampleClassA = new SampleClassA();
sampleMethod["SampleMethod1"]();
sampleMethod["SampleMethod2"]();

結果

SampleClassA / Constoract
SampleClassA / SampleMethod1
SampleClassA / SampleMethod2


Comment

  • プリローダ作るときなんかは、メインのクラスを直接 new してしまうとそこに行くまでに関連する全部のクラスをロードしなければいけなくなってしまうので、getDefinitionByName? を使うようにして、パブリッシュ設定でクラス書き出しを 2 フレーム目以降にしたりします。 -- yossy? 2008-08-24 (日) 21:32:42
  • 参考: tinyurl.com/6c9sov -- yossy? 2008-08-24 (日) 21:34:55
  • yossyさん、なるほどです!すっごいいいこと教わりました。AS3で開発するときはそうしてみます。ありがとうございます~ -- minaco? 2008-08-25 (月) 11:04:45


Counter: 7674, today: 1, yesterday: 2

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-09-24 (火) 14:56:03 (1541d)