我已经创建了一个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?
答案 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个参数:
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")));
});
}