Javascript XHR上载函数的单例引用不起作用
为什么第一个案例不起作用?它是对完全相同的函数的引用,仅采用单例格式 案例1Javascript XHR上载函数的单例引用不起作用,javascript,jquery,upload,xmlhttprequest,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'); } 应该是: xhr
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');
}
应该是:
xhr.upload.onprogress = n.doThis
您所做的是调用n.doThis(e)
并将结果存储到xhr.upload.onprogress
中,它应该是:
xhr.upload.onprogress = n.doThis
您要做的是调用
n.doThis(e)
并将结果存储到xhr.upload.onprogress
在第一种情况下,您要调用doThis
函数,必须将其分配给progress属性,例如
xhr.upload.onprogress = n.doThis;
在第一种情况下,您要调用
doThis
函数,必须将其分配给progress属性,例如
xhr.upload.onprogress = n.doThis;
在第一种情况下,调用函数并将返回值分配给
onprogress
属性
您希望分配函数本身:
xhr.upload.onprogress = n.doThis;
在第一种情况下,调用函数并将返回值分配给
onprogress
属性
您希望分配函数本身:
xhr.upload.onprogress = n.doThis;
在这两种情况下,您都在创建函数对象并将其分配给变量onprogress。对于案例1,您正在创建一个命名函数(请记住,这里的名称无关紧要,只是对创建的函数对象的引用),对于第二个案例,仍然是一个命名函数,除了这里,函数名称是对象xhr.upload上的一个属性 现在回到案例1不起作用的原因。正如其他人提到的,当您执行
xhr.upload.onprogress=n.doThis(e)代码>,您正在调用函数,onprogress现在指向函数调用的结果。但是,省略调用、删除(e)
实际上会使onprogress成为对先前创建的函数对象的引用
希望能有所帮助。在这两种情况下,您都是在创建函数对象并将其分配给变量onprogress。对于案例1,您正在创建一个命名函数(请记住,这里的名称无关紧要,只是对创建的函数对象的引用),对于第二个案例,仍然是一个命名函数,除了这里,函数名称是对象xhr.upload上的一个属性
现在回到案例1不起作用的原因。正如其他人提到的,当您执行xhr.upload.onprogress=n.doThis(e)代码>,您正在调用函数,onprogress现在指向函数调用的结果。但是,省略调用、删除(e)
实际上会使onprogress成为对先前创建的函数对象的引用
希望这能有所帮助。谢谢,我认为我必须把这件事传下去(e)谢谢,我认为我必须把这件事传下去(e)