Document

面向对象:自定义事件

class MyEvent {
        constructor() {
   //给实例化对象添加一个’handle‘属性  值为数组,里面存放自己的函数 类似 let handle = { "myevnet":[fn1,fn2,fn3.....] };
            this.handle = { };
        }
  //绑定(添加)事件   参数:事件名,方法名
        addEvent(eventName, fn) {
    //判断 如果这个事件不存在 给它变为一个空数组
            if (typeof this.handle[eventName] === 'undefined') {
                this.handle[eventName] = [];
            }
    //如果有的话就把fn这个方法放进数组
            this.handle[eventName].push(fn);
        }
  //触发事件  
        trigger(eventName) {
    //遍历 handle 里面对应的事件 让event (每一项即对应的方法)执行
            this.handle[eventName].forEach(event => {
                event && event();//存在并执行
            })
        }
  //移出事件  参数:事件名,方法名  
        removeEvent(eventName, fn) {
   //遍历 handle 里面的事件 如果里面的i === fn 则利用数组的splice方法删除fn 并break
            for (let i = 0; i < this.handle[eventName].length; i++) {
                if (this.handle[eventName][i] === fn) {
                    this.handle[eventName].splice(i, 1);
                    break;
                }
            }
        }
    }
    let newEvent = new MyEvent();
 //绑定事件 
 addEvent("myevent",fn1);
 //触发事件
 trigger("myevent");
 //移出事件
 removeEvent("myevent",fn2);
posted @ 2019-11-13 16:47  假装不帅  阅读(149)  评论(0编辑  收藏  举报