d-utils
Version:
d-utils
32 lines (31 loc) • 1.27 kB
JavaScript
/**
* d-utils version: 4.0.3
* by ifmiss
*/
;var n=require("../_tslib-282d34cf.js"),e=/** @class */function(){function e(){}
/**
* on 方法 添加监听事件
*/return e.on=function(n,r){var t={fn:r,type:"on",name:n};return Object.keys(e.handler).includes(n)?(e.handler[n].push(t),e):(e.handler[n]=[].concat(t),e)},
/**
* off 方法 移除监听事件
*/
e.off=function(n,r){var t=e.handler[n];if(t)for(var o=t.length-1;o>=0;o--)t[o].fn===r&&t.splice(o,1);return e},
/**
* emit 方法 触发监听的事件
*/
e.emit=function(r){for(var t=this,o=[],a=1;a<arguments.length;a++)o[a-1]=arguments[a];var c=e.handler[r],l=[];c&&c.length&&c.forEach((function(e,r){var a;(a=e.fn).call.apply(a,n.__spread([t],o)),
// 如果有只监听一次的事件
"once"!==e.type&&l.push(c.slice(r,r+1))}));var u=c&&c.length&&c.some((function(n){return"once"===n.type}));
// 这里做一个执行完成之后的 once代码 off 的操作
return u&&(e.handler[r]=l),e},
/**
* once 方法 添加事件 只会被执行一次
*/
e.once=function(n,r){e.on(n,r),e.handler[n][0].type="once"},
/**
* 键值对 对应事件名称以及数组的值
*/
e.handler={},e}();
/**
* 一个简单的发布订阅者模式
*/module.exports=e;