XHR 上传功能的单例引用不起作用

Singleton reference for XHR upload function does not work

本文关键字:单例 引用 不起作用 功能 XHR      更新时间:2023-09-26

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

案例 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');
    }

在第一种情况下,你调用doThis函数,你必须把它分配给 progress 属性,例如

xhr.upload.onprogress = n.doThis;

它应该是:

xhr.upload.onprogress = n.doThis

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

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

您希望分配函数本身:

xhr.upload.onprogress = n.doThis;

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

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

希望有帮助。