Event::targetには何が設定されているのか

dispatchEventメソッドでイベントを発生させたりしていたのですが、Eventクラスのtargetプロパティって、何が設定されているのかが気になりました。
Flex3のasdocのEvent::targetには以下のように書かれています。

イベントターゲットです。このプロパティにはターゲットノードが含まれます。例えば、ユーザーが [OK] をクリックした場合、ターゲットノードはそのボタンを含む表示リストノードです。

つまり、[OK]ボタンをクリックした場合、Event::targetには[OK]ボタンが設定されているということ?
まどろっこしいッ!


試しに以下のクラスに対して、Testクラスを実行してみます。
TestDispatcher.as

package
{
	import flash.events.Event;
	import flash.events.EventDispatcher;
	
	public class TestDispatcher extends EventDispatcher
	{
		public function TestDispatcher()
		{
			super();
		}
		
		public function runDispatch():void
		{
			dispatchEvent(new Event(Event.COMPLETE));
		}
	}
}
package
{
	import flash.display.Sprite;
	import flash.events.Event;
	
	public class Test extends Sprite
	{
		private var _dispatcher:TestDispatcher;
		
		public function Test()
		{
			super();
			
			_dispatcher = new TestDispatcher();
			_dispatcher.addEventListener(Event.COMPLETE, onComplete);
			_dispatcher.runDispatch();
		}
		
		private function onComplete(event:Event):void
		{
			if (event.target == _dispatcher)
			{
				trace("target == _dispatcher");
			}
			else
			{
				trace("target != _dispatcher");
			}
		}
	}
}

出力は「target == _dispatcher」となり、dispatchEventが実行されたクラスがEvent::targetに設定されているようです。


Event::targetは読み取り専用プロパティということで、データの設定を手動で行えないのですが、
dispatchEventメソッド内でinternalだったり何かしらのnamespaceであるtargetのsetterでも呼んでいるんですかね?


IEventDispatcherを使用する場合は、実装するEventDispatcherのコンストラクタにthisを渡して使うみたいなので、
その場合送出されるEvent::targetにはこのthisが設定されるに違いない。


なるほど。
これで大っぴらにEventを使えそうです。