1

Why does the first case not work? It is a reference to exactly the same function, only in singleton format.

Case 1..

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

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

Case 2..

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

4 回答 4

1

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

xhr.upload.onprogress = n.doThis;
于 2013-10-02T01:23:02.490 回答
0

它应该是:

xhr.upload.onprogress = n.doThis

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

于 2013-10-02T01:22:55.237 回答
0

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

您要分配函数本身:

xhr.upload.onprogress = n.doThis;
于 2013-10-02T01:23:24.337 回答
0

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

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

希望有帮助。

于 2013-10-02T02:30:13.880 回答