【问题标题】: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。
【解决方案3】:
在第一种情况下,您调用函数并将返回值分配给onprogress 属性。
你想给函数本身赋值:
xhr.upload.onprogress = n.doThis;
【解决方案4】:
在这两种情况下,您都在创建一个函数对象并将其分配给一个变量 onprogress。对于第一种情况,您正在创建一个命名函数(记住,名称在这里无关紧要,只是对创建的函数对象的引用),对于第二种情况,除了这里之外,它仍然是一个命名函数,函数名称是对象 xhr.upload。
现在回到案例 1 不起作用的原因。正如其他人所提到的,当您执行xhr.upload.onprogress = n.doThis(e); 时,您正在调用该函数,而 onprogress 现在指向函数调用的结果。但是,省略调用,删除 (e) 实质上会使 onprogress 成为对先前创建的函数对象的引用。
希望对您有所帮助。