In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

Static Initializerを使ってみた

http://level0.kayac.com/2009/06/static_initiaizer.php
で紹介されているStaticイニシャライザを使ってみた。
どうやら、staticイニシャライザ内部で変数宣言や関数宣言すると、
ローカル変数が作られるのではなく、メンバが作られているっぽい。
なので、コンストラクタや、その他のメンバをstaticイニシャライザに入れることが可能。
ネストが一つ増えた感覚。
基本こんな書き方しないけどな。
Get Adobe Flash player
by coppieee 06 Jul 2009
/**
 * Copyright coppieee ( http://wonderfl.net/user/coppieee )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/bEQD
 */

//http://level0.kayac.com/2009/06/static_initiaizer.php
//で紹介されているStaticイニシャライザを使ってみた。
//
//どうやら、staticイニシャライザ内部で変数宣言や関数宣言すると、
//ローカル変数が作られるのではなく、メンバが作られているっぽい。
//なので、コンストラクタや、その他のメンバをstaticイニシャライザに入れることが可能。
//
//ネストが一つ増えた感覚。
//基本こんな書き方しないけどな。
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.text.TextField;
	
	public class Main extends Sprite 
	{
		//static initializer
		{
			public function Main()
			{
				var tf:TextField = new TextField();
				tf.multiline = true;
				addChild(tf);
				tf.text = "_i :" + _i + "\n";
				tf.appendText("_j :" + _j + "\n");
				tf.appendText("f() :" + f() + "\n");
				tf.appendText("_l : " + _l);
			}
			private function f():int 
			{
				return _i;
			}
			private var _i:int = 1;
			private static var _j:int = 1;
			
			//コンパイルエラー 未定義のプロパティ
			//インスタンスメンバは弄れないっぽい。
			//_i =2;
			
			_j = 2;
			
			//変数宣言は、ローカル変数にならない。
			//internal var _k:int = 5; と同じ。
			var _k:int = 5;
			
			private static var _l:int = 0;
			//ローカル変数を使いたいときは無名関数でくくって使おうね。
			(function():void {
				for (var i:int = 0; i < 10; i++ )
				{
					_l += i;
				}
			})();
		}
	}
	
}