1. 定义一个事件类
可以定义一个事件类来表示一个事件,例如:
class MyEvent {
constructor(name) {
this.name = name;
this.handlers = [];
}
addHandler(handler) {
this.handlers.push(handler);
}
removeHandler(handler) {
this.handlers = this.handlers.filter(h => h !== handler);
}
fire(data) {
this.handlers.slice(0).forEach(h => h(data));
}
}
在这个类中,我们定义了一个 MyEvent
类,它有一个名称和一个处理程序数组。我们还定义了 addHandler
、removeHandler
和 fire
方法。addHandler
方法用于添加一个事件处理程序,removeHandler
方法用于删除一个事件处理程序,fire
方法用于触发事件并调用所有处理程序。注意,我们在 fire
方法中使用 slice(0)
来创建一个处理程序的副本,以确保在调用处理程序时不会修改原始的处理程序数组。
2. 创建一个事件对象
可以使用 new
关键字来创建一个事件对象,例如:
const myEvent = new MyEvent('myEvent');
在这个例子中,创建了一个名为 myEvent
的事件对象。
3. 添加事件处理程序
可以使用 addHandler
方法来添加一个事件处理程序,例如:
myEvent.addHandler(data => {
console.log(`Handler 1: ${data}`);
});
myEvent.addHandler(data => {
console.log(`Handler 2: ${data}`);
});
在这个例子中,添加了两个事件处理程序,它们都会在事件触发时被调用。注意,处理程序的参数可以是任何类型的数据。
4. 触发事件
可以使用 fire
方法来触发事件,例如:
myEvent.fire('Hello, world!');
在这个例子中,触发了 myEvent
事件,并传递了一个字符串参数。这将调用所有已注册的事件处理程序,并将字符串参数传递给它们。