为什么第一种情况不起作用?它是对完全相同的函数的引用,仅以单例格式。
案例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');
}
答案 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成为对先前创建的函数对象的引用。
希望有所帮助。