设计模式(三十) 装饰者模式

//在不改变原有对象的基础上,通过包装扩展使其能增加更多方法和属性

var decorator = function(input, fn){
    var input = document.getElementById(input);
    //若事件源已绑定事件
    if(typeof input.onclick === 'function'){
        //缓存原有事件的回调函数
        var oldClickFn = input.onclick;
        //为事件源定义新事件
        input.onclick = function(){
            oldClickFn();
            fn();
        }
    }else{
        input.onclick = fn;
    }
    //...
}
//给id为aa的元素添加新的事件
decorator('aa', function(){
    //...
})