long long ago,有这么一个事件库
当你想给一个 已经有 3 层继承的祖传 Class 加事件系统:
class 祖传 Class extends 爷爷 Class { /* ... */ }
// 传统方案:硬着头皮再继承一层
class 我的 Class extends 祖传 Class, EventEmitter { /* 多重继承?不存在的!直接报错! */ }
痛点暴击:
现在只需一行魔法:
import { eventable } from 'events-ex';
class 祖传 Java 风 Class extends 爷爷 Class { /* ... */ } // 保持原样
// 注入事件能力,但只注入(暴露) on/emit 方法(深藏功与名)
eventable(祖传 Java 风 Class, {
include: ['on', 'emit'] // 像做外科手术一样精准
});
// 用法和 EventEmitter 一毛一样
const obj = new 祖传 Java 风 Class();
obj.on('data', handleData);
obj.emit('data', payload);
核心理念:
更骚的是连方法都能挂事件:
class 数据库 {
connect() {
// 原始方法保持纯洁
console.log('建立连接');
}
}
// 给 connect 方法加前置事件
eventable(数据库, {
methods: {
connect() {
this.emit('pre-connect'); // 触发事件
this.super(); // 调用原方法( this.super 是魔法关键字!)
}
}
});
// 监听数据库连接事件
const db = new 数据库();
db.on('pre-connect', () => {
console.log('我要开始连接了,各组件注意!');
});
db.connect()
输出结果:
我要开始连接了,各组件注意!
建立连接
灵魂发问:
你们项目里有那种 不敢动又必须增强 的类吗?快来试试这套无痛事件注入方案!
传送门:
👉 GitHub 地址 | 📚 完整 API 文档
投喂姿势:
npm install events-ex
讨论点:
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.