【问题标题】:Bind this in an instance在实例中绑定 this
【发布时间】:2019-06-08 09:15:25
【问题描述】:

我有一个简单的类来处理 Fetch 响应的可读流:

class ProgressIndicator {

  constructor(res) {

    this.res = res;

    this.contentLength = parseInt(res.headers.get('content-length', 10));

    this.loaded = 0;

    return new Response(

      new ReadableStream({

        start(controller) {

          console.log(this);

          this.reader = this.res.body.getReader();

          this.readStream(controller);

        }

      })

    );

  }

显然,如果我在 start 函数中记录这个,我会得到自己的函数。

知道如何将 ProgressIndicator 对象绑定到启动函数吗?

【问题讨论】:

  • 在 ProgressIndicator 中创建属性 self = this;和日志(自己);将引用类范围
  • @Sameer 我用过 self 并且它可以工作,但是如果我创建多个实例并不危险?或者它为每个实例创建一个新的自我?
  • 它将为每个创建新实例。除非您将 self 声明为静态。

标签: javascript ecmascript-2017


【解决方案1】:

在 ProgressIndicator 类中创建属性,它将引用类范围。

 class ProgressIndicator {

  var selfScope = this;

  constructor(res) {

    this.res = res;

    this.contentLength = parseInt(res.headers.get('content-length', 10));

    this.loaded = 0;

    return new Response(

      new ReadableStream({

        start(controller) {

          console.log(selfScope);

          this.reader = this.res.body.getReader();

          this.readStream(controller);

        }

      })

    );

  }

【讨论】:

  • 在 ProgressIndicator 中创建属性 self = this;和日志(自己);将引用类范围
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
  • 2020-01-15
  • 1970-01-01
相关资源
最近更新 更多