"use strict";
class EventSystem {
    constructor() {
        // 所有事件
        this.events = new Map();
    }
    /**
     * 订阅事件
     */
    on(eventType, callback, context) {
        let event = {
            callback: callback,
            context: context
        };
        if (this.events.get(eventType)) {
            // 存在, push 一个事件监听
            this.events.get(eventType).push(event);
        }
        else {
            // 不存在, 赋值
            this.events.set(eventType, [event]);
        }
    }
    /**
     * 取消订阅
     */
    off(eventType, callback) {
        if (!this.events.get(eventType)) {
            return false;
        }
        this.events.get(eventType).filter(event => {
            return event.callback !== callback;
        });
        return true;
    }
    /**
     * 广播事件
     */
    emit(eventType, context) {
        if (!eventType || !this.events.get(eventType)) {
            return false;
        }
        this.events.get(eventType).forEach(event => {
            event.callback(event.context, context);
        });
    }
}
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = EventSystem;
