2010-07-28 46 views
2

我得到了一个关于jQuery的简单问题,但是一般来说javascript方法...jquery:上下文关闭?

可以吗? :

this._checkedTexts.length = 0; // <- array belonging to "me" 
var contextCheckedTexts = this._checkedTexts; 

$('#valueContainer input:checked').each(function() { 
    contextCheckedTexts.push($(this).text()); 
}); 

由于'this'指向元素,因此我在这里使用闭包来为'each'处理程序保留其他上下文。

这是'如何完成'的方式,或者是否可能存在以这种方式使用闭包(memoryleak-wise ....)的风险?

还有其他的选择吗?

我觉得它非常实用 - 但是我总是有点担心引入引用计数问题时使用闭包 - 这将很难找到以后。

回答

0

我不知道你想达到什么目的,但你的代码也可以这样做,

this._checkedTexts.length = 0; // <- array belonging to "me" 

var arr = $('#valueContainer input:checked').map(function() { 
    return $(this).text(); 
}).get(); 

this._checkedTexts = this._checkedTexts.concat(arr); 
+0

非常真棒:)我更喜欢jQuery越来越多......感谢提示! - 但仍然,问题依然存在:对于具有'错误'这个指针的函数,使用闭包来处理上下文是否正常(以及通常的方法)? – Wolfgang 2010-07-28 07:09:50

+0

是的,可以使用闭包......但如果你这样做,就像这样做,'var self = this;'...这样你就可以使用'self'调用其他属性。例如'self._checkedTexts.push($(本)的.text());.与此同时,你已经消除了'var contextCheckedTexts = this._checkedTexts;'...... – Reigel 2010-07-28 07:22:45

+0

...听起来像一个计划 - 而且如果我每次都这样做,可能会更少混乱:)谢谢! – Wolfgang 2010-07-28 07:31:18

0

这似乎是细如jQuery的方法,如eachmapgrep不支持上下文默认情况下(绑定到当前的jQuery对象)。但是,您可以创建自己的bind函数,该函数将上下文应用于函数(但在这种情况下,您不需要使用默认上下文来获取元素文本)。