事件监听器

88 阅读1分钟

添加监听器

在一个对象中创建了以事件名为属性名的数组,数组里面存放的是函数

addListener(eventType, listener) {
        if (!this._listeners[eventType]) {
            this._listeners[eventType] = [];
        }
        this._listeners[eventType].push(listener);
}

移除监听事件

以倒序方式遍历事件数组,查出要移除的函数,并置为null

    removeListener(eventType, listener) {
        if (!this._listeners[eventType]) {
            return;
        }
        for (let i = this._listeners[eventType].length - 1; i >= 0; i--) {
            if (this._listeners[eventType][i] === listener) {
                this._listeners[eventType][i] = null;
                break;
            }
        }
    }

触发事件

判断事件属性存在,获取参数,正序遍历事件数组并执行函数,

    trigger(eventType) {
        if (!this._listeners[eventType]) {
            return true;
        }
        // 获取触发事件所传的参数
        const args = Array.prototype.slice.call(arguments, 1);
        let result = true;
        for (let i = 0; i < this._listeners[eventType].length; i++) {
            const fn = this._listeners[eventType][i];
            if (fn) {
                if (false === fn.apply(this, args)) {
                    result = false;
                }
            }
        }
        return result;
    }