• node.js 中 events emitter 的实现(发布、订阅模式)


    const EventEmitter = require('events');

    const myEmitter = new EventEmitter();

    myEmitter.on('event', () => {
    console.log('触发事件');
    });

    myEmitter.emit('event');
     
     
    =================================================================================================================
     
     
    自己实现一个Nodejs中的event (发布、订阅模式):

    function Events() {

    //on的作用是定义一个handle对象,对象中eventName作为属性,callback推入这个属性数组中
    this.on = function (eventName, callBack) {
     
    //如果没有handles,就就新建一个handle对象
    if (!this.handles) {
    //首先定义了一个对象
    this.handles = {};
    }
    //如果handles[eventName]没东西,那么handles[eventName] 是一个空数组
    if (!this.handles[eventName]) {
    this.handles[eventName] = [];
    }
    //讲callback推入数组
    this.handles[eventName].push(callBack);
    }


    //emit的作用是找到hanlds对象中的handle[eventname] 然后传入参数并执行数组中所有方法
    this.emit = function (eventName, obj) {
    //遍历handles对象 ,将handles[eventName]数组中的callback传入obj参数并一一执行
    if (this.handles[eventName]) {
    for (var i = 0; i < this.handles[eventName].length; i++) {
    this.handles[eventName][i](obj);
    }
    }
    }

    return this;

    }



    //设计模式
    //发布-订阅模式
    var event1 = new Events();
    var event2 = new Events();


    //handles 对象中hanlds['say']:[ function(){}...]
    event1.on('say', function () {
    console.log('Jony event1');
    });

    //handle 对象中handles['say']:{ }
    event1.on('say', function () {
    console.log('Jony event1+');
    });

    //handles 对象中handles['say']:[...]
    event2.on('say', function () {
    console.log('Jony event2');
    })

    event1.emit('say');

    event2.emit('say');

  • 相关阅读:
    unityshader学习笔记3
    unityshader学习笔记2
    unityshader学习笔记1
    AssetBundle资源打包与加载
    lua学习笔记4--XLua
    lua学习笔记3--lua与c#交互
    lua学习笔记2--table
    cocos2dx-android-添加64位编译
    lua学习笔记1--基础语法
    使用青花瓷(charles)抓包
  • 原文地址:https://www.cnblogs.com/eret9616/p/9333282.html
Copyright © 2020-2023  润新知