手撕算法(6)——事件

11 阅读1分钟
const myEvent = {
    eventMap: {},
    addEventListener: function (eventName, callback) {
        if (this.eventMap[eventName]) {
            this.eventMap[eventName].push(callback);
        } else {
            this.eventMap[eventName] = [callback];
        }
    },
    emit: function (eventName, ...args) {
        if (this.eventMap[eventName]) {
            this.eventMap[eventName].forEach(callback => {
                callback(...args);
            });
        }
    },
    clearEventListener: function (eventName) {
        delete this.eventMap[eventName]
    }
}

用例

// 添加事件监听器
myEvent.addEventListener("click", function (message) {
    console.log("Clicked:", message);
});

// 再次添加相同事件监听器
myEvent.addEventListener("click", function (message) {
    console.log("Clicked again:", message);
});

// 触发事件
myEvent.emit("click", "Button 1 clicked");

// 清除特定事件的所有监听器
myEvent.clearEventListener("click");

// 再次触发事件,但不会有任何输出
myEvent.emit("click", "Button 2 clicked");