Javascript 在jQuery中,如何解析;这",;,当您在each()的范围内时?

Javascript 在jQuery中,如何解析;这",;,当您在each()的范围内时?,javascript,jquery,scope,this,Javascript,Jquery,Scope,This,我已经创建了一个对象,并且在该对象中有一个setup()方法 this.debug = function (){...} this.setup = function(){ var fieldsets = form.children("fieldset"); fieldsets.each(function(){ this.debug($(this).attr("class"))); }); } 我试图调用this.debug,它在对象的范围内

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

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

this.setup = function(){    

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

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


}
我试图调用this.debug,它在对象的范围内,但不在每个对象的范围内,因为这是一个不同的


如何访问this.debug?

在this.debug之后说
var that=this
,然后执行
that.debug
在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);
}
proxy(函数,对象)函数将接受2个参数:

  • 该函数将是循环中使用的函数
  • 对象参数将是函数中的
    这个
    对象

通过这种方式,您可以从
每个
函数内部的外部作用域中转移

这基本上是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")));
  });      
}

我在我的Greasemonkey控制台上试过这个:

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

this.setup = function() {

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

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

它将搜索任何调试的作用域。。希望这就是上面的函数。如果您指定了一个名称相同的变量,则此操作将失败:)

我通常是这样做的:(注意:下面的示例来自内存,但看起来不错):


这个和那个。。。这应该行得通。将that=this放在setup()方法的开头。(所谓工作,我的意思是正确地调用debug()方法,它仍然可能抛出错误。)您真的想做
var that=this
。一般来说,忽略var是一个坏主意。谢谢@Kyle-我上次编写JavaScript已经有一段时间了:P你忘了这些小细节…
foreach
循环中的这个
将包含当前迭代的fieldset对象。+1。此外,如果调试方法不使用实例数据,则可以在静态上下文中调用它:ContainingObject.debug($(this.attr(“class”));。对于将for循环转换为
jQuery非常有用;
var=thisthis
的匿名函数,则“代码>技巧”也不起作用。在调用内部函数之前
将消失的局部变量
function CustomObject()
{
  var _instance = this;

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

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

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


}