/*
装饰者模式:
在不改变原对象的基础上,通过对其进行包装拓展(添加属性或方法)使原对象可以满足用户更复杂需求。
*/

var decorator = function (input, fn) {
    // 获取事件源
    var input = document.getElementById(input);
    // 若事件源已经绑定事件
    if (typeof input.click === 'function') {
        // 缓存事件源原有回调函数
        var oldClickFn = input.click;
        // 为事件源定义新的事件
        input.click = function () {
            // 事件源原有回调函数
            oldClickFn();
            // 执行事件源新增回调函数
            fn();
        }
    } else {
        // 事件源未绑定事件,直接为事件源添加新增回调函数
        input.onclick = fn;
    }
}