使用node做一些小工具,还是很方便的。今天我就来分享下 event 小工具(有效的避免Node的事件回掉)
function Event(){
this.__listeners__ = [];
}
Event.prototype.addEvent = function(name, callback, tag){
if(app.Utils.isNull(name)){
console.error("current event name must not be null");
return;
}
if(!app.Utils.isFunction(callback)){
console.error("current event callback must be an instance of function");
return;
}
if(this.__listeners__[name]){
console.error("current event already exits");
return;
}
tag = tag || "";
this.__listeners__[name] = {callback, tag};
}
Event.prototype.dispatchEvent = function(event){
let name = event.name;
if(app.Utils.isNull(name)){
console.error("current event name must not be null");
return
}
let target = this.__listeners__[name];
if(app.Utils.isNull(target)){
console.error("current event not exits");
return
}
event.tag = target["tag"];
event.data = event.data || {};
target['callback'](event);
}
Event.prototype.removeEventByName = function(name){
if(this.__listeners__[name]){
this.__listeners__[name] = null;
delete this.__listeners__[name];
}
}
Event.prototype.removeEventByTag = function(tag){
if(app.Utils.isNull(tag)){
console.error("currcert event tag must not be null ...");
return;
}
for (const name in this.__listeners__) {
if (this.__listeners__.hasOwnProperty(name)) {
let tagname = this.__listeners__[name]["tag"];
if(tagname === tag){
this.removeEventByName(name);
}
}
}
}
module.exports = Event;
网友评论