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

时间:2013-10-02 01:21:02

标签: javascript jquery upload xmlhttprequest

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

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

4 个答案:

答案 0 :(得分:1)

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

xhr.upload.onprogress = n.doThis;

答案 1 :(得分:0)

应该是:

xhr.upload.onprogress = n.doThis

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

答案 2 :(得分:0)

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

您想要自己分配函数:

xhr.upload.onprogress = n.doThis;

答案 3 :(得分:0)

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

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

希望有所帮助。