在回调函数中访问变量

时间:2014-03-29 19:39:11

标签: javascript callback

您好我有以下代码,我在调用一个函数,该函数接受一个带参数的回调函数。基本上我试图将e的内容放入this.items但我无法逃避回调函数?

function stash(){
    this.items = new Array();

    this.get = function(){
      opr.stash.query({},function(e){
         console.log(this.items); //this is not defined
      });
    }
}

s = new stash();
s.get();

3 个答案:

答案 0 :(得分:2)

问题:回调函数的上下文对象(this)不再引用get()方法的上下文对象。

解决方案:bind您对目标对象的回调函数,如下所示:

opr.stash.query({},(function(e){
  console.log(this.items);
}).bind(this));

答案 1 :(得分:0)

这已经不在回调的范围内了,所以要引用它,以后可以使用。 .bind(this)在现代浏览器中是一个很好的解决方案,但在旧版本的Internet Explorer中可能会失败,因为该方法可能无法使用。

function stash(){
        var self = this; 
        this.items = new Array();

        this.get = function(){
          opr.stash.query({},function(e){
             console.log(self.items); 
          });
        }
    }

答案 2 :(得分:0)

我在d3.chart中遇到了类似的问题。

我目前无权访问opr.stash,因此我无法先测试,但您是否尝试过以下内容:

function stash()
{
    var myStash = this;

    myStash.items = new Array();

    myStash.get = function(){
       opr.stash.query({},function(e){
       console.log(myStash.items); //this is not defined
      });
    }
}

s = new stash();
s.get();