stage
Adam smithの回答は、「instance235」を取得する理由をすでに説明しているので、オブジェクトのname
プロパティがnullに等しい場合の回避策について説明します。
オブジェクトのラッパークラスを作成し、stage
そのクラスに。というプロパティを与えることができますname
。ラッパークラスものサブクラスである必要があります。これにより、そのメソッドEventDispatcher
をオーバーライドしaddEventListener()
、その機能を変更して、イベントリスナーをステージオブジェクトとラッパーオブジェクトに暗黙的に追加できるようになります。それを説明する最良の方法は、私が作成した例を示すことです。
package
{
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
public class Main extends Sprite
{
private var _stageWrapper:StageWrapper;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}// end function
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
var stageWrapper:StageWrapper = new StageWrapper(stage, "stage");
stageWrapper.addEventListener(MouseEvent.CLICK, onStageWrapperClick);
}// end function
private function onStageWrapperClick(e:MouseEvent):void
{
trace(e.target.name) // output: stage
}// end function
}// end class
}// end package
import flash.display.Stage;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.MouseEvent;
internal class StageWrapper extends EventDispatcher
{
private var _stage:Stage;
private var _name:String;
private var _listener:Function;
public function get stage():Stage { return _stage }
public function get name():String { return _name }
public function StageWrapper(stage:Stage, name:String)
{
_stage = stage;
_name = name;
}// end function
override public function addEventListener(type:String,
listener:Function,
useCapture:Boolean = false,
priority:int = 0,
useWeakReference:Boolean = false):void
{
super.addEventListener(type, listener, useCapture, priority, useWeakReference);
_stage.addEventListener(type, onStageEvent, useCapture, priority, useWeakReference);
}// end function
private function onStageEvent(e:Event):void
{
dispatchEvent(e);
}// end function
}// end class
個人的に私はこのアプローチを採用しませんが、これはあなたが進んでいるように見える方向性について私があなたに与えることができる最良の答えです。