实现一个事件监听器Event 类,支持下列方法 addEventlistener(eventName: string,listener: function) :监听事件,当事件触发时执行回调函数 removeEventlistener (eventName: string,listener: function):移除监听事件 addEventlistenerOnce(eventName: string,listener: function):监听事件,当事件触发时执行回调函数并只执行一次回调函数 removeAll(eventName:string) 移除监听事件的所有回调函数 emit(eventName) 触发事件,执行回调函数 其中参数eventName为事件名,listener为事件触发后执行的回调函数 系统将自动执行你实现的Event类中的函数,校验是否实现以上功能 注意:系统通过执行函数,将控制台输出信息与测试用例进行比对,以验证函数的正确。所以函数内请不要添加输出控制台信息的代码,比如 Javascript 的console.log 输入
时间: 2023-07-17 21:12:12 浏览: 86
```javascript
class Event {
constructor() {
this.events = {};
addEventListener(eventName, listener) {
if (!this.events[eventName]) {
this.events[eventName] = [];
}
this.events[eventName].push(listener);
}
removeEventListener(eventName, listener) {
if (this.events[eventName]) {
this.events[eventName] = this.events[eventName].filter((eventListener) => eventListener !== listener);
}
}
addEventListenerOnce(eventName, listener) {
const onceListener = (...args) => {
listener(...args);
this.removeEventListener(eventName, onceListener);
};
this.addEventListener(eventName, onceListener);
}
removeAll(eventName) {
delete this.events[eventName];
}
emit(eventName, ...args) {
if (this.events[eventName]) {
this.events[eventName].forEach((listener) => listener(...args));
}
}
}
```
这是一个基本的Event类实现,可以满足你提供的要求。它使用一个对象(events)来存储不同事件名对应的监听器数组,每个事件名对应的监听器数组可以有多个回调函数。当调用addEventListener方法时,将回调函数添加到对应事件名的监听器数组中。当调用removeEventListener方法时,从对应事件名的监听器数组中移除指定的回调函数。addEventListenerOnce方法是在原有的addEventListener基础上增加了只执行一次的功能,通过创建一个内部的onceListener函数,在回调函数执行后自动移除监听。removeAll方法用于移除指定事件名下的所有回调函数。emit方法用于触发特定事件,并执行对应事件名下的所有回调函数。
请注意,在实现过程中,this.events[eventName]表示对应事件名的监听器数组,这里使用数组来存储多个回调函数。另外,为了提供更好的扩展性,可以考虑添加一些边界条件的检查和错误处理。
阅读全文