如何理解此Node.js代码片段?

时间:2018-10-05 04:39:33

标签: javascript 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);
    }
};

ticker.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++)

我正处于初级阶段。

1 个答案:

答案 0 :(得分:1)

  

Roee.js ::构造函数使用一个arg作为函数。

是的。该构造函数有点像使用回调模式,并在该类的实例上使用发出函数调用函数。这是不寻常的事情。

  

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

是的。在构造函数的回调中(有点奇怪),传递给该回调的参数是一个函数,该函数必须从Roee类的实例发出事件。

  

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

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

现在,外部代码如何获取值? ticket.js中的代码调用emit类(扩展事件发射器)上的Roee方法。任何引用了Roee实例的人都可以将侦听器添加到事件中,包括ticker事件。触发该事件后,当前滴答的数据将通过它传递。

真的,这种代码模式通常非常糟糕。在少数情况下,班级以外的某些事物应该触发该班级的事件。可能我没有从翻译中理解某些内容,但我指出了此代码模式问题,以便您了解自己的麻烦不仅是您自己,而且不是您的错。