class CustomEvent {
constructor() {
// {
// eventName: [];
// }
this.eventsKeeper = {};
}
isAssigned(name, cb) {
const keeper = this.eventsKeeper;
if (!cb) {
return name in keeper;
} else {
return name in keeper && keeper[name].indexOf(cb) !== -1;
}
}
on(name, cb) {
const keeper = this.eventsKeeper;
const cbs = keeper[name];
if (this.isAssigned(name, cb)) return;
if (!cbs) {
keeper[name] = [cb];
} else {
keeper[name].push(cb);
}
}
emit(name, ...rest) {
if (this.isAssigned(name)) {
this.eventsKeeper[name].forEach(cb => {
cb(...rest);
});
} else {
throw Error(`you may not listen [${name}] event!`);
}
}
remove(name) {
if (!name) return;
delete this.eventsKeeper[name];
}
}
// test
// node test.js
// const event = new CustomEvent();
// event.on("test", (first, second) => {
// console.log(`${first} ${second}`);
// console.log("it is ok");
// });
// event.on("test", () => {
// console.log("it is line ok");
// });
// event.remove("test");
// event.on("line", () => {
// console.log("it is line ok ");
// });
// event.emit("line");
// setTimeout(() => {
// event.emit("test", "hello", "world");
// }, 2000);
Javascript中自定義事件
相關文章
- JavaScript自定義事件JavaScript事件
- 使用jQuery在javascript中自定義事件jQueryJavaScript事件
- javascript自定義事件原理JavaScript事件
- javascript自定義回車事件JavaScript事件
- Javascript框架的自定義事件(轉)JavaScript框架事件
- Javascript事件模型系列(四)我所理解的javascript自定義事件JavaScript事件模型
- WPF自定義路由事件路由事件
- 繫結自定義事件事件
- WPF 自定義附加事件事件
- 自定義事件提醒程式事件
- jquery自定義事件的使用jQuery事件
- Android自定義OnTouch事件Android事件
- 微信小程式自定義事件微信小程式事件
- java 自定義監聽事件Java事件
- 在vue專案中自定義事件匯流排eventHubVue事件
- JS觀察者模式-自定義事件JS模式事件
- 自定義事件相容處理物件事件物件
- 自定義的事件管理器事件
- 元件間通訊--自定義事件元件事件
- 自定義一個事件聚合器事件
- js 建立和觸發事件 和 自定義事件JS事件
- 自定義View事件之進階篇(四)-自定義Behavior實戰View事件
- Netty中自定義事件處理程式和監聽器Netty事件
- FineReport中如何用JavaScript自定義地圖示籤JavaScript地圖
- vue router路由自定義後退事件Vue路由事件
- js發起自定義事件CustomEventJS事件
- jQuery自定義事件簡單介紹jQuery事件
- C#:委託和自定義事件C#事件
- 080 元件自定義事件-繫結元件事件
- 自定義事件實現子傳父事件
- ASPxGridView中Command列自定義按鈕點選事件概要View事件
- Android自定義TitleBar 自定義標題欄 並進行事件處理Android事件
- 自定義View以及事件分發總結View事件
- js自定義Android端手勢事件JSAndroid事件
- 為自定義的View新增長按事件View事件
- 前端自定義類事件回撥封裝前端事件封裝
- 自定義View事件篇進階篇(二)-自定義NestedScrolling實戰View事件
- Vue中自定義指令Vue