Javascript reader.onload回调问题与typescript

Javascript reader.onload回调问题与typescript,javascript,asynchronous,file-upload,Javascript,Asynchronous,File Upload,我正在使用angular2构建一个简单的文件上传。 我有以下代码。在代码中,回调被分配给onload。之后,上下文将更改为reader,而不是它所在的类。我无法访问overview类中的其他对象 export class overview { change() { var reader = new FileReader(); reader.onload = this.uploadFile; reader.readA

我正在使用angular2构建一个简单的文件上传。 我有以下代码。在代码中,回调被分配给onload。之后,上下文将更改为reader,而不是它所在的类。我无法访问overview类中的其他对象

    export class overview {
       change() {
          var reader = new FileReader();
          reader.onload = this.uploadFile;
          reader.readAsDataURL($("input[name='image']")[0].files[0]);
        }
       uploadFile() {
        console.log(this); //"this" refers to reader obj,how can i get the overview object
       this.api('upload'); //this does not work because api is undefined
       }
   }

关键字this根据其调用方获取新上下文。您可以使用类的构造函数重写此默认行为,并显式绑定所有方法的上下文

constructor() {
    for (var name in this) {
        if ($.isFunction(this[name])) {
            this[name] = this[name].bind(this);
        }
    }
}
此函数循环遍历类的所有属性,并使用jQuery检查属性是否为方法。然后,它将其上下文绑定为始终为类级别。注意,这对匿名函数没有任何影响,在这种情况下,您可以使用一个变量来跟踪它。比如

public Test(): void {
    var self = this;
    something.callback = function() {
        console.log(this);
        console.log(self); //will be your class level
    }
}