1. // const EventEmitter = require("events");
    2. // const event = new EventEmitter(); //因为EventEmitter是底层函数,所以需要new一下
    3. //沙盒模式{隐式实例化} 好处:让对象纯净化,不会被污染(下面三个代码相当于引入的两行代码)
    4. //事件队列
    5. let eventArr = [];
    6. //死循环(node的事件执行机制)
    7. setInterval(function() {
    8. for(let i = 0; i < eventArr.length; i++) {
    9. if(eventArr[i]) {
    10. //从头开始遍历队列,队列中存在事件就执行该函数
    11. eventArr[i]();
    12. //执行结束后用shift()函数从头部删除事件句柄
    13. eventArr.shift();
    14. //index-1,相当于每次都再i=0执行事件句柄
    15. i--;
    16. }
    17. }
    18. }, 100);
    19. //为event对象events事件添加了一个键值对
    20. let event = {
    21. on: function(eventName, callback) {
    22. this[eventName] = callback;
    23. },
    24. //emit函数的本质:为事件队列推入一个句柄
    25. emit: function(emitName) {
    26. eventArr.push(this[emitName]);
    27. }
    28. };
    29. //on函数的本质:为event对象的events事件添加了一个键值对
    30. event.on("liziyue", function() {
    31. console.log("liziyuedashuiage");
    32. });
    33. event.on("dashuaige", function() {
    34. console.log("liziyue");
    35. });
    36. //把事件句柄推入事件队列
    37. setTimeout(() => {
    38. event.emit("liziyue");
    39. }, 2000);
    40. setTimeout(() => {
    41. event.emit("dashuaige");
    42. }, 3000);