以下为ChatGPT自动生成的解答,正确与否请自行判断。 也许你也可以从大家的发帖中找到想要的答案!

BFE.devAI解答 - JavaScript 代码题
16. 实现一个Event Emitter

实现一个简单的Event Emitter可以使用JavaScript的类来实现,利用对象的属性和方法来存储事件和对应的回调函数。

以下是可能的实现:

class Emitter {  constructor() {    this.events = {}  }    subscribe(eventName, callback) {    // 如果该事件还没有任何订阅者,则新建一个数组    if (!this.events[eventName]) {      this.events[eventName] = []    }        // 将callback添加到事件的回调函数数组中    this.events[eventName].push(callback)        // 返回一个带有release方法的对象,用于取消订阅    return {      release: () => {        const index = this.events[eventName].indexOf(callback)        this.events[eventName].splice(index, 1)      }    }  }    emit(eventName, ...args) {    // 如果该事件存在,则遍历所有的回调函数并执行它们    if (this.events[eventName]) {      this.events[eventName].forEach(callback => callback(...args))    }  }}

这样我们就可以使用这个Event Emitter了:

const emitter = new Emitter()const sub1 = emitter.subscribe('event1', (a, b) => {  console.log(`callback1 called with ${a} and ${b}`)})const sub2 = emitter.subscribe('event2', () => {  console.log('callback2 called')})emitter.emit('event1', 1, 2)// 输出: callback1 called with 1 and 2sub1.release()emitter.emit('event1', 3, 4)// 没有输出emitter.emit('event2')// 输出: callback2 calledsub2.release()emitter.emit('event2')// 没有输出