如果没有使用事件处理程序,从事件处理程序中删除事件参数有什么好处?

时间:2012-10-17 20:46:09

标签: flash flex events displayobject

如果没有使用事件处理程序,从事件处理程序中删除事件参数是否有任何好处?我有以下实例:

<s:Button rollOver="handleRollOver(event)" rollOut="handleRollOut(event)"/>

以下代码:

private function handleRollOver(event:Event):void
{
    // doing stuff
}

private function handleRollOut(event:Event):void
{
    // doing stuff
}

如果不使用事件对象,是否有任何好处?例如,将其更改为:

<s:Button rollOver="handleRollOver()" rollOut="handleRollOut()"/>

以下代码:

private function handleRollOver():void
{
    // doing stuff
}

private function handleRollOut():void
{
    // doing stuff
}

我问的原因有几个原因。一个是我听说事件在所有显示对象中冒泡,所以如果你可以阻止它们节省一些CPU(不知道多少)。但这会涉及调用event.stopProp()类型的调用不仅仅是在捕获时而不是在冒泡时间?另外,我听说键入事件有助于节省CPU,因此事件:事件比事件慢:MouseEvent。我可以尝试找到消息来源,但在那之前,也许有人知道我在说什么。感谢

2 个答案:

答案 0 :(得分:1)

我不相信有任何好处,但也没有任何缺点。它有效,没有任何错误。您将无法访问事件属性。对于MXML,请确保不传递事件,否则会出错。

无论如何,始终传递事件是最佳做法,无论您是否需要。它可能更方便,但它使您的代码在搜索时不那么灵活且不易识别。

如果您正在寻找一种方法来调用事件处理程序而不包含事件,您可以这样做:

private function clickHandler(e:MouseEvent = null):void{

}

为事件参数设置默认值null允许您绕过该需求而没有问题。此时,我设置的每个事件处理程序都有一个默认值null,有时也添加了参数,这样我就可以在需要时手动调用它。

答案 1 :(得分:1)

我认为始终传递event参数是一个好习惯,因为您可能稍后需要它们 - 例如,如果您决定添加日志记录,或者您正在调试等等。这是有价值的信息,它不应轻易丢弃。

事件冒泡的性能问题往往被夸大了:无论如何:鼠标点击事件每次点击都会冒一次气泡,除非你堆叠了几千个显示对象,否则你的系统不会因此而变得迟钝。当然,还有其他事件更频繁或更快地发生,而如果你注意到故障,事件处理应该是最先检查的地方之一。但除非它显然是必要的,否则担心除了Event.ENTER_FRAME以外的任何事情对我来说似乎都是过早的优化。

话虽如此 - 您可以通过在处理程序中手动停止传播来安全地防止任何事件冒泡:

private function clickHandler ( ev:Event ) : void {
    ev.stopImmediatePropagation();
}