JavaScript - 如何将范围传递给reader.onload方法

时间:2015-12-08 21:08:51

标签: javascript extjs

我正在使用ExtJS框架。

在我的reader.onload fn中我发出一个Ajax请求,在成功函数中,我使用"这个"来调用另一个函数,但是"这个"未定义。

reader.onload = function(e){
  //do stuff

  Ext.Ajax.request({
    url:url,
    params:params,
    method:"POST",
    scope:this,
    success:function(resp){
      //decode resp;
      console.log(this);//FileReader obj, not the controller obj this code is in
      if(resp.something){
        this.foo(resp); //this.foo isundefined
      }
    }
  });
};

在另一篇文章的其他地方,有人回答了传递范围:

reader.onload = (function(e){
  //do stuff
}(this));

但是当我这样做时," e"变得不确定。

1 个答案:

答案 0 :(得分:2)

您可以使用self等内容保留对所需对象的引用。

var self = this;
reader.onload = function(e) {
  ...
  Ext.Ajax.request({
    url:url,
    params:params,
    method:"POST",
    scope:self,
    success:function(resp){
      if(resp.something){
        this.foo(resp);
      }
    }
  });
};