首页 > 解决方案 > 如何理解这个 Node.js 代码片段?

问题描述

我试图理解这段 Node.js 代码。

Roee.js

const emitters = require('events');
module.exports=class Roee extends emitters{
    constructor(eee){
    super();
    const emit = this.emit.bind(this);
    this.emit=undefined;
    eee(emit);
    }
};

股票代码.js

     const emiCl = require('./roee');
     const tikee = new emiCl((emiff) => {
           let tickcnt=0;
           setInterval(() => {
                  emiff('ticker',tickcnt++)
            }, 1200);
      }
     );
    module.exports = tikee;

tester.js

const mytickel = require('./tiker');
mytickel.on('ticker', (tickcount) => console.log(tickcount,'tempdfg'));

我的问题:

Roee.js:构造函数接受一个用作函数的 arg。

ticker.js:定义在 roee.js 中传递的函数。这个函数有一个参数,这又是一个函数,对吧?

tester.js:如何访问计数器并将参数传递给函数emiff('ticker',tickcnt++)

我处于初学者阶段。

标签: javascriptnode.js

解决方案


Roee.js:: 构造函数接受一个用作函数的 arg。

是的。这个构造函数有点使用回调模式,在该类的实例上使用 emit 函数调用您的函数。这是一件不寻常的事情。

ticker.js:: 定义在 roee.js 中传递的函数。这个函数有一个参数,这又是一个函数,对吧?

这是正确的。在来自构造函数的回调中(这有点奇怪),传递给这个回调的参数是一个绑定到从类的实例发出事件的函数Roee

tester.js:如何访问计数器并将参数传递给函数“emiff('ticker',tickcnt++)”?

tickcnt是在构造函数的回调函数设置的闭包中。由于tickcnt从 that 中引用setInterval,因此不会被垃圾收集。

现在,外部代码如何获得价值?中的代码ticket.js调用类emit上的方法Roee(扩展事件发射器)。任何引用该实例的东西Roee都可以向事件添加侦听器,包括ticker事件。当该事件被触发时,当前刻度的数据将通过它传递。

真的,这个代码模式总体上是相当糟糕的。在少数情况下,类之外的东西应该触发该类的事件。可能我没有从翻译中理解某些内容,但我指出了这个 Code Pattern 问题,以便您知道您的理解困难不仅仅是您,也不是您的错。


推荐阅读