前端自定義類事件回撥封裝

槑孒發表於2024-06-26

JS自定義類事件回撥封裝示例

class Tracklayer {
  private eventListeners: { [key: string]: Function[] };

  constructor(){
      this.eventListeners = {}; // 事件監聽器列表
  }  

   /**
   * 新增事件監聽器的方法
   * @param event - 事件名稱
   * @param callback - 事件觸發時的回撥函式
   */
  public on(event: string, callback: Function): void {
    if (!this.eventListeners[event]) {
      this.eventListeners[event] = [];
    }
    this.eventListeners[event].push(callback);
  }

  /**
   * 移除事件監聽器的方法
   * @param event - 事件名稱
   * @param callback - 要移除的回撥函式
   */
  public off(event: string, callback: Function): void {
    const listeners = this.eventListeners[event];
    if (listeners) {
      this.eventListeners[event] = listeners.filter((listener) => listener !== callback);
    }
  }

  /**
   * 觸發事件的方法
   * @param event - 事件名稱
   * @param data - 傳遞給事件回撥的附加資料(可選)
   */
  private fire(event: string, data?: any): void {
    const listeners = this.eventListeners[event];
    if (listeners) {
      listeners.forEach((callback) => callback(data));
    }
  }
}

相關文章