// 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);