0

如果不使用从事件处理程序中删除事件参数有什么好处吗?我有以下实例:

<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,所以 event:Event 比 event:MouseEvent 慢。我可以尝试寻找消息来源,但在那之前,也许有人知道我在说什么。谢谢

4

2 回答 2

1

我不相信有任何好处,但也没有坏处。它有效,不会出错。您只是无法访问事件属性。在 MXML 的情况下,请确保您没有传递事件,否则您将收到错误消息。

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

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

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

}

为 event 参数设置一个默认值 null 可以让您绕过该要求而零问题。此时,我设置的每个事件处理程序都有一个默认值 null,有时还添加了参数,以便我可以在需要时手动调用它。

于 2012-10-18T00:10:58.520 回答
1

我认为始终传递事件参数是一种很好的做法,因为您以后可能需要它们 - 例如,如果您决定添加日志记录,或者在调试时等。这是有价值的信息,不应该很容易被丢弃。

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

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

private function clickHandler ( ev:Event ) : void {
    ev.stopImmediatePropagation();
}
于 2012-10-18T05:34:07.443 回答