// const EventEmitter = require("events");
// const event = new EventEmitter(); //因为EventEmitter是底层函数,所以需要new一下
//沙盒模式{隐式实例化} 好处:让对象纯净化,不会被污染(下面三个代码相当于引入的两行代码)
//事件队列
let eventArr = [];
//死循环(node的事件执行机制)
setInterval(function() {
for(let i = 0; i < eventArr.length; i++) {
if(eventArr[i]) {
//从头开始遍历队列,队列中存在事件就执行该函数
eventArr[i]();
//执行结束后用shift()函数从头部删除事件句柄
eventArr.shift();
//index-1,相当于每次都再i=0执行事件句柄
i--;
}
}
}, 100);
//为event对象events事件添加了一个键值对
let event = {
on: function(eventName, callback) {
this[eventName] = callback;
},
//emit函数的本质:为事件队列推入一个句柄
emit: function(emitName) {
eventArr.push(this[emitName]);
}
};
//on函数的本质:为event对象的events事件添加了一个键值对
event.on("liziyue", function() {
console.log("liziyuedashuiage");
});
event.on("dashuaige", function() {
console.log("liziyue");
});
//把事件句柄推入事件队列
setTimeout(() => {
event.emit("liziyue");
}, 2000);
setTimeout(() => {
event.emit("dashuaige");
}, 3000);