方法中的函数

时间:2013-11-15 21:38:41

标签: javascript jquery oop

这是一个普遍好奇的问题,我一直在教自己面向对象的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关键字,但似乎不起作用。在示例中,我希望得到新的

1 个答案:

答案 0 :(得分:3)

指定this的上下文变量:

this.across = function(el,arr,i) {
    var that = this;
        $(el).each(function() {
            console.log(that); //is "this" from before the .each