使用…(rest) 扩展Event参数对象属性

大家都知道,当发生事件时,Event对象将作为参数传递给事件侦听器,但Event对象将作为参数的属性是有限的。如果要传递特殊参数,一般会想到通过自定义事件类来实现。下面介绍一种更简单的方法:使用…(rest) 参数来扩展Event参数对象属性。

下面自定义了一个事件代理类:

package { 
    public class EventDelegate 
    { 
        public static function create(f : Function,... arg) : Function {     
            var isSame : Boolean = false;            
            var _f : Function = function(e : *,..._arg):void{                
                _arg = arg;              
                if(!isSame) {                    
                    isSame = true;                   
                    _arg.unshift(e);                 
                }                
                f.apply(null, _arg); 
            };   
            return _f;   
        }        
        public static function toString() : String {             
            return "Event Delegate";         
        }    
    } 
}

使用方法很简单:addEventListener(事件类型, EventDelegate.create(侦听器函数, 参数)),用法有点类似AS2中的Delegate类。

发表评论