2013-11-15 28 views
0

这是一个普遍好奇的问题,我一直在教自己面向对象的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.across来填充我的数组和更新我的指数像这样:

$(document).ready(function(){ 


    var arr = [[],[],[]]; 
    var i = 0; 
    var el = $("#hourly input"); 
    var t = new total(el,arr,i); 
    alert(t.across()); 


}); 

我的问题是,一旦我进入。每个方法,关键字this不再是指总的实例,但现在在。每个方法传递的元素。那么我怎样才能将返回的值传递给传递给原始函数的数组。在这个例子中,我使用了arr关键字,但看起来不起作用。在这个例子中,我希望能得到新的

+0

你一定问题不只是你的文件准备好功能? – adeneo

+0

或者您在警报调用中引用该功能,而不是调用它? – adeneo

+0

该代码不工作的实际原因可能是,但我的问题是具体如何保持上下文分离,并回答了我的问题,这实际上只是一个测试脚本没有其他任何东西,谢谢你的头。此外,我没有标记jquery,因为问题本身不是jQuery特定的 – richbai90

回答

3

指定的this上下文变量:

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

谢谢,这很有道理。 – richbai90

+0

将来可以使用.bind()方法为函数分配上下文。不幸的是,它不适用于IE <9,因为它是Javascript 1.8.5的一部分(至少不是没有修改函数原型或使用像MooTools这样的框架) –