为什么我不能消除这个箭头函数?

数据库

我确信以下两个陈述归结为同一件事。但是在将第一个语句重构为第二个语句后,我破坏了我的应用程序。

const myReader = new DataReader(line => this.onStdOutLine(line));
process.stdout.on('data', (data) => myReader.processData(data));
const myReader = new DataReader(line => this.onStdOutLine(line));
process.stdout.on('data', myReader.processData);

为什么这两个不是一回事?

this这些箭头函数中没有,所以它看起来无害。至于 DataReader 类本身:

type DataReaderCallback = (msg: string) => any

export class DataReader {
  private _buffer = "";

  constructor(private listener: DataReaderCallback = null) {
  }

  processData(data) {
    // remove carriage returns.
    data = data.toString().replace(/\r/g, '');
    this._buffer += data;

    // get only the complete data.
    const lastNewlineIndex = this._buffer.lastIndexOf('\n');
    if (lastNewlineIndex < 0) return;

    if (this.listener != null) {
      // split data in lines
      const completeData = this._buffer.slice(0, lastNewlineIndex);
      const lines = completeData.split('\n');
      for (const line of lines) {
        // notify listener line by line.
        this.listener(line);
      }
    }

    // remove processed data from the buffer.
    this._buffer = this._buffer.slice(lastNewlineIndex + 1);
  }
}
昆汀

至于 DataReader 类本身……

确实使用this,例如this._buffer += data;

所以需要调用的代码需要processData确保这myReaderthis价值。

箭头函数通过将其调用为myReader.processData(data).

如果将该processData函数作为参数传递给 ,on则事件处理代码不会myReader. 它甚至不知道myReader存在。

如果你想移除箭头函数,那么你必须做一些其他的事情来维护myReader.

您可以使用函数表达式,或bind.

process.stdout.on('data', function (data) {
   myReader.processData(data);
});

process.stdout.on('data', myReader.processData.bind(myReader));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我不能用 lambda 替换这个函数

为什么我不能在 React 中调用这个函数?

为什么我在这个 TypeScript 箭头函数中得到这个错误?

为什么我不能在 Eigen3 中消除这个临时变量?

为什么我不能投射这个界面?

为什么我不能选择这个?-硒

为什么我们不能使用ES6箭头函数创建原型?

为什么我不能在封闭函数之外重构这个匿名函数?

为什么在这个函数中我不能返回false,但我可以返回true?(球拍)

为什么这个全局函数不能访问我的全局对象?

为什么在javascript中我不能在这个函数中创建对象?

为什么我不能在这个草率模式函数中访问arguments.callee?

为什么我不能使用这个 transferEther 函数将 Ether 发送到智能合约?

为什么这个 python 函数不能正确读取我的 json 文件字符串?

为什么我不能在 Python 中使用变量作为参数来调用这个函数?

为什么这个箭头函数与签名相同的非箭头函数不一样?

在React中,为什么我不能使用嵌套的箭头函数...虽然正常的函数似乎可以正常工作?

为什么我不能调用我的函数?

为什么我不能返回箭头功能?

为什么我不能创建无效箭头功能?

为什么我不能在JSX中以这种方式使用三元运算符和箭头函数?

在这个例子中,为什么我不能用函数的返回值代替函数名?

为什么这个模板函数不能识别 lamda 的返回类型?

为什么这个模板函数不能编译C ++

为什么这个 UrlFetch 函数不能正常工作?

为什么我不能调用子函数?

为什么我不能这样编写函数?

为什么不能内联我的模板函数

为什么这个宏不能像我想的那样工作?