在jQuery中,当你在每个()的范围内时,如何解决“this”的范围?

时间:2010-02-18 19:00:21

标签: javascript jquery scope this

我已经创建了一个Object,并在对象中有一个方法setup()。

this.debug = function (){...}

this.setup = function(){    

  var fieldsets = form.children("fieldset");

  fieldsets.each(function(){        
    this.debug($(this).attr("class")));
  });


}

我正在尝试调用this.debug,它位于Object的范围内但不在每个范围内,因为这是一个不同的...

如何访问this.debug?

6 个答案:

答案 0 :(得分:5)

在this.debug之后说var that = this,然后执行that.debug

答案 1 :(得分:3)

这基本上是Skilldrik的答案,但会向您展示最佳效果

this.setup = function(){    
  // save it in a scoped var...  some people use "self" for this purpose, i prefer
  // naming it whatever the outer object actually is...
  var containingObject = this;

  var fieldsets = form.children("fieldset");

  fieldsets.each(function(){        
    // use that scoped var later!
    containingObject.debug($(this).attr("class")));
  });      
}

答案 2 :(得分:1)

在jQuery 1.4中,你可以这样做:

this.debug = function (){...}

this.setup = function(){    

  var fieldsets = form.children("fieldset");

  fieldsets.each(jQuery.proxy(function(){
    this.debug($(this).attr("class")));
  },this);
}

jQuery.proxy(function,object)函数将采用2个参数:

  • 该函数将是循环中使用的函数。
  • object参数将是函数内的this对象。

通过这种方式,您可以从this函数内的外部范围转移each

答案 3 :(得分:0)

我在我的Greasemonkey-Console中尝试了这个:

this.debug = function() {
    console.log("foo");
};

this.setup = function() {

    var fieldsets = form.children("fieldset");

    fieldsets.each(function(){
        debug($(this).attr("class"));
    });
};

哪个将在范围内搜索任何调试..哪个是希望上面的函数。如果您指定一个具有相同名称的变量,则会失败:)

答案 4 :(得分:0)

我通常这样做:(注意:下面的例子来自内存,但看起来很健全):

function CustomObject()
{
  var _instance = this;

  this.debug = function(){...};
  this.setup =
    function()
    {    
      var fieldsets = form.children("fieldset");
      fieldsets.each(
        function()
        {        
          _instance.debug($(this).attr("class"));
        });
    };
}

答案 5 :(得分:0)

this.debug = function (){...}

this.setup = function(){    
  var that = this;
  var fieldsets = form.children("fieldset");

  fieldsets.each(function(){        
    that.debug($(this).attr("class")));
  });


}
相关问题