Я не понимаю, как я должен получить ссылку на экземпляр приложения в методе обратного вызова. Я смотрел на это: Как получить доступ к правильному this
внутри обратного вызова? , но на самом деле не чувствовал, что я что-то получил от него.
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]);
Но это кажется очень неловким способом сделать это. Могу ли я добиться этого другим, более элегантным способом?