事件机制

/**
 * Created by admin on 2017/11/1.
 */
//Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 EventEmitter 类来绑定和监听事件
//  1.事件绑定与触发
//引入Events模块
var events = require('events');
//创建eventEmitter对象
var eventEmitter = new events.EventEmitter();
function eventHandler() {
    console.log("eventname事件监听处理函数");
}
//绑定事件和处理程序 ,eventName是事件类型
eventEmitter.on('eventName', eventHandler);
//触发事件
eventEmitter.emit('eventName');


//  2.对于每个事件,EventEmitter 支持若干个事件监听器。
//当事件触发时,注册到这个事件的事件监听器被依次调用,事件参数作为回调函数参数传递。
function callback(arg1, arg2) {
    console.log("触发someEvent事件" + arg1 + "  " + arg2);
}
eventEmitter.addListener('someEvent111',callback);
eventEmitter.on('someEvent111', function (arg1, arg2) {
    console.log("触发someEvent事件1 " + arg1 + "  " + arg2);
});
eventEmitter.emit('someEvent111', 'arg1', 'arg2');
eventEmitter.removeListener('someEvent111', callback);
console.log("listener1 不再受监听。");
eventEmitter.emit('someEvent111', 'arg1', 'arg2');

//eventEmitter对象方法总结:
//添加监听:①on(event, listener)  ②addListener(event, listener)  ③once(event, listener)监听器最多只会触发一次.PS:感觉事件名可以随便写,只要和emit中对应就行
//移除监听:①removeListener(event, listener) ②removeAllListeners([event])移除所有事件的所有监听器,如果指定事件,则移除指定事件的所有监听器。
//其他:setMaxListeners(n)用于提高监听器的默认限制(10)的数量,超过n发出警告。
//其他:emit(event, [arg1], [arg2], [...])按参数的顺序执行每个监听器,如果事件有注册监听返回true,否则返回 false//其他:listeners(event)返回指定事件的监听器数组。

//  3.类方法调用demo
var count = events.EventEmitter.listenerCount(eventEmitter, 'someEvent111');
console.log("someEvent111的监听器数量为:" + count);

//类方法:listenerCount(emitter, event)返回指定事件的监听器数量。
//事件监听:当添加新的监听器时,newListener(event, listener)事件会触发,当监听器被移除时,removeListener(event, listener)事件被触发。

//  4.一般要为会触发 error 事件的对象设置监听器,避免遇到错误后整个程序崩溃
var events = require('events');
var emitter = new events.EventEmitter();
//注册error事件,否则无法输出53emitter.on("error",function (arg1) {
   console.log("error:"+arg1);
});
emitter.emit('error');
console.log("error事件发生,未中断退出程序");

//  5.大多数时候我们不会直接使用EventEmitter,而是在对象中继承它。
// 包括 fsnet http 在内的,只要是支持事件响应的核心模块都是 EventEmitter 的子类。
//为什么要这样做呢?原因有两点:
//首先,具有某个实体功能的对象实现事件符合语义,事件的监听和发射应该是一个对象的方法。
//其次JavaScript的对象机制是基于原型的,支持部分多重继承,继承 EventEmitter不会打乱对象原有的继承关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值