这是一个普遍好奇的问题,我一直在教自己面向对象的javascript编程,因为我喜欢它提供的结构和灵活性,但我遇到了一个问题,我比其他任何事情都困惑。假设我有以下代码:
function total (el,arr,i)
{
this.across = function(el,arr,i) {
$(el).each(function() {
if(!$(this).attr("id"))
{
//-- convert each value to a number and push to items array
arr.push(parseFloat($(this).val()));
i = i++;
}
});
return arr;
};
}
我可以创建一个新的total实例并将其传递给我的元素,数组和索引参数,然后调用total.across来填充我的数组并更新我的索引:
$(document).ready(function (){
var arr = [[],[],[]];
var i = 0;
var el = $("#hourly input");
var t = new total(el,arr,i);
alert(t.across());
});
我的问题是,一旦我输入.each方法,关键字this
不再引用total的实例,而是引用.each方法中传递的元素。然后如何将返回的值推送到传递给原始函数的数组。在这个例子中,我使用的是arr关键字,但似乎不起作用。在示例中,我希望得到新的
答案 0 :(得分:3)
指定this
的上下文变量:
this.across = function(el,arr,i) {
var that = this;
$(el).each(function() {
console.log(that); //is "this" from before the .each