【问题标题】:Singleton reference for XHR upload function does not workXHR 上传功能的单例参考不起作用
【发布时间】:2013-10-08 08:14:09
【问题描述】:

为什么第一种情况不起作用?它是对完全相同的函数的引用,只是单例格式。

案例 1..

var n = {
    doThis: function(e){
        console.log('hello world');
    }
};

xhr.upload.onprogress = n.doThis(e);

案例 2..

xhr.upload.onprogress = function(e){
        console.log('hello world');
    }

【问题讨论】:

    标签: javascript jquery upload xmlhttprequest


    【解决方案1】:

    在您调用doThis 函数的第一种情况下,您必须将其分配给进度属性,例如

    xhr.upload.onprogress = n.doThis;
    

    【讨论】:

      【解决方案2】:

      应该是:

      xhr.upload.onprogress = n.doThis
      

      您正在做的是调用n.doThis(e) 并将结果存储到xhr.upload.onprogress

      【讨论】:

      • 谢谢,我想我必须把事件传递下去(e)
      【解决方案3】:

      在第一种情况下,您调用函数并将返回值分配给onprogress 属性。

      你想给函数本身赋值:

      xhr.upload.onprogress = n.doThis;
      

      【讨论】:

        【解决方案4】:

        在这两种情况下,您都在创建一个函数对象并将其分配给一个变量 onprogress。对于第一种情况,您正在创建一个命名函数(记住,名称在这里无关紧要,只是对创建的函数对象的引用),对于第二种情况,除了这里之外,它仍然是一个命名函数,函数名称是对象 xhr.upload。

        现在回到案例 1 不起作用的原因。正如其他人所提到的,当您执行xhr.upload.onprogress = n.doThis(e); 时,您正在调用该函数,而 onprogress 现在指向函数调用的结果。但是,省略调用,删除 (e) 实质上会使 onprogress 成为对先前创建的函数对象的引用。

        希望对您有所帮助。

        【讨论】:

          猜你喜欢
          • 2017-12-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-28
          • 1970-01-01
          • 2013-07-07
          • 2021-02-25
          • 2019-12-16
          相关资源
          最近更新 更多