Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 方法中的函数_Javascript_Jquery_Oop - Fatal编程技术网

Javascript 方法中的函数

Javascript 方法中的函数,javascript,jquery,oop,Javascript,Jquery,Oop,这是一个普遍好奇的问题,我一直在自学面向对象的javascript编程,因为我喜欢它提供的结构和灵活性,但我遇到了一个最让我困惑的问题。假设我有以下代码: function total (el,arr,i) { this.across = function(el,arr,i) { $(el).each(function() { if(!$(this).attr("id")) { //-- convert each v

这是一个普遍好奇的问题,我一直在自学面向对象的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.Cross来填充我的数组并更新我喜欢的索引:

$(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关键字,但这似乎不起作用。在这个例子中,我希望得到新的分配一个上下文变量
this

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

将上下文变量指定为this:

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

将上下文变量指定为this:

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

将上下文变量指定为this:

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


谢谢,这很有意义。将来可以使用.bind()方法为函数分配上下文。不幸的是,它不适用于IE<9,因为它是Javascript 1.8.5的一部分(至少在不修改函数原型或使用类似MooTools的框架的情况下是如此),这很有意义。将来,可以使用.bind()方法为函数分配上下文。不幸的是,它不适用于IE<9,因为它是Javascript 1.8.5的一部分(至少在不修改函数原型或使用类似MooTools的框架的情况下是如此),这很有意义。将来,可以使用.bind()方法为函数分配上下文。不幸的是,它不适用于IE<9,因为它是Javascript 1.8.5的一部分(至少在不修改函数原型或使用类似MooTools的框架的情况下是如此),这很有意义。将来,可以使用.bind()方法为函数分配上下文。不幸的是,它不适用于IE<9,因为它是Javascript 1.8.5的一部分(至少在不修改函数原型或使用MooTools之类的框架的情况下是如此),您确定问题不仅仅是您的文档就绪函数,或者您在警报调用中引用了该函数,不调用它?代码不起作用的实际原因可能是,但我的问题是,具体如何保持上下文独立,这回答了我的问题,这实际上只是一个测试脚本,而不是其他任何东西,谢谢大家的提醒。另外,我没有标记jquery,因为问题本身不是jquery特有的。我清理了代码,再次感谢你。如果你做得完全错误,你必须这样做->你确定问题不仅仅是你的文档就绪函数?或者你在警报调用中引用了该函数,不调用它?代码不起作用的实际原因可能是,但我的问题是,具体如何保持上下文独立,这回答了我的问题,这实际上只是一个测试脚本,而不是其他任何东西,谢谢大家的提醒。另外,我没有标记jquery,因为问题本身不是jquery特有的。我清理了代码,再次感谢你。如果你做得完全错误,你必须这样做->你确定问题不仅仅是你的文档就绪函数?或者你在警报调用中引用了该函数,不调用它?代码不起作用的实际原因可能是,但我的问题是,具体如何保持上下文独立,这回答了我的问题,这实际上只是一个测试脚本,而不是其他任何东西,谢谢大家的提醒。另外,我没有标记jquery,因为问题本身不是jquery特有的。我清理了代码,再次感谢你。如果你做得完全错误,你必须这样做->你确定问题不仅仅是你的文档就绪函数?或者你在警报调用中引用了该函数,不调用它?代码不起作用的实际原因可能是,但我的问题是,具体如何保持上下文独立,这回答了我的问题,这实际上只是一个测试脚本,而不是其他任何东西,谢谢大家的提醒。另外,我没有标记jquery,因为问题本身不是jquery特有的。我清理了代码,再次表示感谢。如果你完全错了,你必须这样做->