[ActionScript 3.0] Event#targetとcurrentTarget
イベントをリスナーで受け取ったとき、Event#targetとEvent#currentTargetの指し示すものが異なる場合がある。特にMouseEventでは注意が必要。
var child:Sprite = new Sprite; child.graphics.beginFill(0); child.graphics.drawRect(20, 20, 20, 20); var parent:Sprite = new Sprite; parent.graphics.beginFill(0x0000ff, 0.5); parent.graphics.drawRect(20, 20, 50, 50); parent.addChild(child); parent.addEventListener(MouseEvent.CLICK, function (e:MouseEvent):void { if (e.target == parent) trace("e.target is parent"); else trace("e.target is child"); if (e.currentTarget == parent) trace("e.currentTarget is parent"); else trace("e.currentTarget is parent"); } ); addChild(parent);
Event#targetとcurrentTarget – wonderfl build flash online
この例だと、parentにリスナーをつけているにもかかわらず、childの部分をクリックすると、currentTargetはparentだがtargetはchildになる。
つまり、targetはイベントが発生するきっかけとなったオブジェクトを指し示し、currentTargetはあくまでリスナーをつけたオブジェクトになる。
普通、childからのイベントを受け取りたければそれ自身にaddEventListnerするはずなので、Event#targetによって対象を判別することはあまりないように思う。
よって、つまらないミスを防ぐために、基本的にEvent#currentTargetのほうを参照する癖をつけておいたほうがいいのかもしれない。