Javascript 在jQuery中,如何解析;这",;,当您在each()的范围内时?
我已经创建了一个对象,并且在该对象中有一个setup()方法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,它在对象的范围内
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=this如果在每个匿名函数中定义了另一个依赖于外部this
的匿名函数,则“代码>技巧”也不起作用。在调用内部函数之前
将消失的局部变量。
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")));
});
}