对多个事件类型使用相同的事件监听器回调是不好的做法吗?

时间:2011-11-18 13:52:30

标签: actionscript-3 events code-reuse reduce event-listener

这可能更像是一个主观问题,但通常最佳做法是为每个事件类型添加一个专用方法,以便添加事件监听器吗?

如:

myButton.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
myButton.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);

//Somewhere else in the code...

private function onMouseOver(e:MouseEvent):void {
 this.mouseIsOverButton = true;
}
private function onMouseOut(e:MouseEvent):void {
 this.mouseIsOverButton = false;
}

或者,一个事件监听器回调是否可以简单地重用于常见的Event类型?

像这样:

myButton.addEventListener(MouseEvent.MOUSE_OVER, onMouseHandler);
myButton.addEventListener(MouseEvent.MOUSE_OUT, onMouseHandler);

//Somewhere else in the code...

private function onMouseHandler(e:MouseEvent):void {
 this.mouseIsOverButton = e.type==MouseEvent.MOUSE_OVER;
}

如果您有MouseEvent.MOUSE_UPMouseEvent.MOUSE_DOWN和其他相关MouseEvents事件监听器需要关注,您甚至可以设置switch语句来处理所有各种事件MouseEvent种类型。

我想知道,如果有经验的开发人员会反对这种在多个Event类型中共享相同方法的方式吗?

1 个答案:

答案 0 :(得分:4)

我认为这取决于你有多少事件,以及它们的效果有多相似。如果两种事件类型在语义上相似(例如MOUSE_DOWNMOUSE_CLICK)并且它们的效果相似(例如按下按钮),那么您可以捆绑它们。

如果事件的影响太大(我说的代码少于80%),我建议反对它,然后只编写多个处理程序并将常用功能分组到一个单独的子程序中。