javascript - 如何在回调方法中保留 'this'?

标签 javascript callback

我不明白我应该如何在回调方法中获取应用程序实例的引用。我一直在看这个:How to access the correct this inside a callback?但并没有真正感觉到我从中得到了什么。

class App
{
  constructor()
  {
    this.imageHandler = new ImageHandler();
    this.imageHandler.loadImages(["img.jpg"], this.create);
  }

  create()
  {
    console.log("Here 'this' is undefined");
    console.log(this.imageHandler.images[0]);
  }
}

class ImageHandler
{
  constructor()
  {
    this.images = [];
  }

  loadImages(urls, callback)
  {
    urls.forEach((url) => {
      var img = new Image();
      this.images.push(img);
      img.onload = () => {
        if (this.images.length == urls.length) {
          callback();
        }
      }
      img.src = url;
    });
  }
}

所以笨拙的方法可能是像这样链接对原始实例的引用:

this.imageHandler.loadImages(["img.jpg"], this.create, this);

loadImages(urls, callback, self)

callback(self);

create(self)

console.log(self.imageHandler.images[0]);

但这似乎是一种非常尴尬的做法。我可以用另一种更优雅的方式实现它吗?

最佳答案

取而代之的是:

this.imageHandler.loadImages(["img.jpg"], this.create);

试试这个:

this.imageHandler.loadImages(["img.jpg"], this.create.bind(this));

问题是您正在传递对类方法的引用,但它没有绑定(bind)到 this 中的实例,除非您调用 .bind().

关于javascript - 如何在回调方法中保留 'this'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53127828/

相关文章:

python - 扭曲的链接回调在一起不传递数据

javascript - 检查 Oracle 11gR2 计划作业何时完成并在 Oracle APEX 中提醒用户

javascript - 悬停时在 <div> 中填充背景颜色作为从中心点开始向外移动的动画

JavaScript : When exactly the function assigned to the onload event executes?

javascript - 验证空文本框时 onSubmit 事件出错

javascript - 如何在 Dojo 中过滤/查询 FilteringSelect

javascript - 如何提高 html、css、javascript 的知识

google-app-engine - 在Google Cloud Storage签名的URL中提供回调URL

javascript - Bokeh:双击圆圈时的JS回调

javascript - 如何将参数传递给 setTimeout() 回调?