标签:off param event Snippet callback EventEmitter type events
同步链接: https://www.shanejix.com/posts/[Snippet] - EventEmitter/
API
-subscribe / addListener / on -
publish / emit -
unsubscribe / removeListener / off;
EventEmitter
class EventEmitter {
constructor() {
/**
* 订阅中心
*
* {"type":[callback1,callback2,...]}
*
*/
this.events = {};
}
/**
* subscribe event
* @param {*} type
* @param {*} callback
*/
on(type, callback) {
if (this.events[type]) {
// 当前 type 类型已经订阅,则在数组后追加
this.events[type].push(callback);
} else {
// 当前 type 类型未订阅,则初始化数组
this.events[type] = [callback];
}
}
/**
* subscribe event
* @param {*} type
* @param {*} callback
*/
subscribe(type, callback) {
this.on(type, callback);
}
/**
* subscribe event
* @param {'*'} type
* @param {*} callback
*/
addListener(type, callback) {
this.on(type, callback);
}
/**
* emit event
* @param {*} type
*/
emit(type) {
// 通知执行当前 type 类型的所有回调函数
if (this.events[type] && this.events[type].length) {
this.events[type].forEach((callback) => {
callback();
});
}
}
/**
* emit event
* @param {*} type
*/
publish(type) {
this.emit(type);
}
/**
* off event
* @param {*} type
* @param {*} callback
*/
off(type, callback) {
// 取消订阅当前 type 类型的 callback 回调
if (this.events[type] && this.events[type].length) {
this.events[type] = this.events[type].filter((cb) => cb !== callback);
}
}
/**
* off event
* @param {*} type
* @param {*} callback
*/
unsubscribe(type, callback) {
this.off(type, callback);
}
/**
* off event
* @param {*} type
* @param {*} callback
*/
removeListener(type, callback) {
this.off(type, callback);
}
}
usage
const eventEmitter = new EventEmitter();
eventEmitter.on("type", () => {
console.log("type executed");
});
eventEmitter.emit("type");
作者:shanejix
出处:https://www.shanejix.com/posts/[Snippet] - EventEmitter/
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
声明:转载请注明出处!
标签:off,param,event,Snippet,callback,EventEmitter,type,events 来源: https://www.cnblogs.com/shanejix/p/15828253.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。