仿写node.js的events模块中的on方法和emit方法

事件驱动,顾名思义就是用事件运行代码。如在前端,我定义了一个Btn按钮,给他绑定了一个事件,如果一百年以内没有人点过这个按钮那么他的事件就不会被触发,他的内部程序就不会运行,所以这个理念用到node.js也是ok的。但是node没有html那种定义事件的btn怎么办??
于是就有了events这个模块,他的主要功能就是绑定事件。

在node.js中有一个events模块,是事件驱动型,类似于我前端建立了一个btn事件,然后再规定的时间触发了这个btn事件

如何去用Events模块来写。

var events = require('events'); //先引用

var ObServer = new events.EventEmitter(); 

ObServer.on('MyBtnName',  function (res) {
	console.log(res)   //第一个参数MyBtnName就是你绑定得名字可以说是一个key值
//function得res应该不用解释了把,这个是回调,也就是你触发时候传入得参数
})

//触发这个事件
ObServer.emit('MyBtnName','我是测试');
//第一个参数则是你绑定得事件,后面传入得参数在MyBtnName得回调里面可以获取

以上是官网模块得基本调用方法,接下来我们可以写一个简单得,监听方法和触发方法

class EventsGyc {
    constructor(){
        this._events = this._events ||new Map  //Map是Map对象
        this.maxlength = this.maxlength || 10  //这个不出意外应该是最大能监听10或者自己设置
    }
}  

先定义一个类,EventsGyc等同于events类

//这个时候在其原型上添加方法
EventsGyc.prototype.emit = function(name,...args){
    let data = this._events.get(name);
    if(args.length>0){
        data.apply(this,args) //回调
    }else {
        data.call(this) //回调
    }
    return  true;
}

这个是触发方法,其核心主要得是在这个回调,这个回调很灵性

EventsGyc.prototype.on = function(name,fn){
    if(!this._events.get(name)){  //name属于key值
        this._events.set(name,fn);
    }
}

//监听事件,做要是把name当作key,fn参数当成数据,存放在Map集合中。

这个时候监听和绑定事件都写好,我们可以写写例子试试跑跑

let EventGyc = new EventsGyc();  //观察者模式其实,就是在函数得原型链上进行保存。

EventGyc.on('gyc',function (res,res1,res2,rew3) {  //创建一个gyc事件
    console.log(res)
    console.log(res1,res2,rew3)
})
EventGyc.emit('gyc','2222','2331','4444','1111'); // 触发gyc事件并且传入四个参数

事件驱动得原理大概清楚了一些,写下来分享个人得拙见,在我得理解里面,事件驱动就是在事件得原型上进行操作,把name和参数当作数据保存在原型得map集合中,每当被触发得时候则就需取出参数当作回调传回给on函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值