Javascript 如何留住';这';在回调方法中?
我不知道如何在回调方法中获取应用程序实例的引用。我一直在看这个:但我并不觉得我从中得到了什么Javascript 如何留住';这';在回调方法中?,javascript,callback,Javascript,Callback,我不知道如何在回调方法中获取应用程序实例的引用。我一直在看这个:但我并不觉得我从中得到了什么 class App { constructor() { this.imageHandler = new ImageHandler(); this.imageHandler.loadImages(["img.jpg"], this.create); } create() { console.log("Here 'this' is undefined");
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));
问题是,您正在传递对类上方法的引用,但它没有绑定到this
中的实例,除非您调用.bind()
而不是此:
this.imageHandler.loadImages(["img.jpg"], this.create);
试试这个:
this.imageHandler.loadImages(["img.jpg"], this.create.bind(this));
问题是,您正在传递对类上方法的引用,但它没有绑定到
this
中的实例,除非调用.bind()
此问题绝对不是重复的。如果你读了这个问题,你会发现它至少在某种程度上与ES6类有关。这个问题绝对不是重复的。如果你读了这个问题,你会发现它至少在某种程度上与ES6类有关。