我正在尝试了解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++)
?
我正处于初级阶段。
答案 0 :(得分:1)
Roee.js ::构造函数使用一个arg作为函数。
是的。该构造函数有点像使用回调模式,并在该类的实例上使用发出函数调用函数。这是不寻常的事情。
ticker.js ::定义在roee.js中传递的函数。该函数带有一个参数,这又是一个函数,对吧?
是的。在构造函数的回调中(有点奇怪),传递给该回调的参数是一个函数,该函数必须从Roee
类的实例发出事件。
tester.js:如何访问计数器并将参数传递给函数“ emiff('ticker',tickcnt ++)“?
tickcnt
在由构造函数的回调函数设置的闭包中。由于tickcnt
是从setInterval
内部引用的,因此不会被垃圾收集。
现在,外部代码如何获取值? ticket.js
中的代码调用emit
类(扩展事件发射器)上的Roee
方法。任何引用了Roee
实例的人都可以将侦听器添加到事件中,包括ticker
事件。触发该事件后,当前滴答的数据将通过它传递。
真的,这种代码模式通常非常糟糕。在少数情况下,班级以外的某些事物应该触发该班级的事件。可能我没有从翻译中理解某些内容,但我指出了此代码模式问题,以便您了解自己的麻烦不仅是您自己,而且不是您的错。