如果没有使用事件处理程序,从事件处理程序中删除事件参数是否有任何好处?我有以下实例:
<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。我可以尝试找到消息来源,但在那之前,也许有人知道我在说什么。感谢
答案 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();
}