// 定义一个简单的 EventBus 类
class EventBus {
constructor() {
this.events = {};
}
// 订阅事件
on(eventName, callback) {
if (!this.events[eventName]) {
this.events[eventName] = [];
}
this.events[eventName].push(callback);
}
// 触发事件
emit(eventName, data) {
if (this.events[eventName]) {
this.events[eventName].forEach(callback => callback(data));
}
}
// 取消订阅事件
off(eventName, callback) {
if (this.events[eventName]) {
this.events[eventName] = this.events[eventName].filter(cb => cb !== callback);
}
}
}
// 使用示例
const bus = new EventBus();
// 订阅 'click' 事件
bus.on('click', (data) => {
console.log('Click event received:', data);
});
// 触发 'click' 事件
bus.emit('click', { x: 100, y: 200 });
// 取消订阅 'click' 事件
const clickHandler = (data) => {
console.log('Another click handler:', data);
};
bus.on('click', clickHandler);
bus.off('click', clickHandler);
// 再次触发 'click' 事件,只有第一个订阅者会收到消息
bus.emit('click', { x: 300, y: 400 });
通过这种方式,你可以轻松地在应用程序的不同部分之间传递消息,而不需要直接依赖或引用彼此。
上一篇:js map set
下一篇:js delegate
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站