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);
}
};
股票代码.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++)
?
我处于初学者阶段。
解决方案
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 问题,以便您知道您的理解困难不仅仅是您,也不是您的错。
推荐阅读
- c - 由 8 个 __m256i 寄存器表示的矩阵的 AVX2 转置
- python - 在特定模式之前和之后获取完整的字符串
- elasticsearch - 如何通过不匹配模式的 kv 过滤器排除解析事件
- python - 在 python pandas 中存款的储蓄计划的累积回报
- python - Python 3.7 上的 NameError/列表分配索引错误
- javascript - 使用 axios 对拦截器进行单元测试会引发错误
- gnuplot - 如何填充定义范围内两条曲线之间的部分?
- docker - 无法在 docker 容器内找到视图
- python - 如何使函数“addlevels”在我的主代码中工作?
- java - 使用 apache commons csv 按索引大小而不是 withFirstRecordAsHeader 读取 csv