XHR 上传功能的单例引用不起作用
Singleton reference for XHR upload function does not work
为什么第一种情况不起作用?它是对完全相同函数的引用,只是采用单例格式。
案例 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');
}
在第一种情况下,你调用doThis
函数,你必须把它分配给 progress 属性,例如
xhr.upload.onprogress = n.doThis;
它应该是:
xhr.upload.onprogress = n.doThis
您正在做的是调用n.doThis(e)
并将结果存储到 xhr.upload.onprogress
中。
在第一种情况下,调用函数并将返回值分配给 onprogress
属性。
您希望分配函数本身:
xhr.upload.onprogress = n.doThis;
在这两种情况下,您都在创建一个函数对象并将其分配给正在进行的变量。 对于情况 1,您正在创建一个命名函数(请记住,名称在这里无关紧要,只是对创建的函数对象的引用),对于第二种情况,除了此处之外,您仍然是命名函数,函数名称是对象 xhr.upload 上的属性。
现在回到为什么案例 1 不起作用。 正如其他人所提到的,当您执行xhr.upload.onprogress = n.doThis(e);
时,您正在调用函数,并且 onprogress 现在指向函数调用的结果。 但是,省略调用、删除(e)
实质上会使 onprogress 成为对以前创建的函数对象的引用。
希望有帮助。
相关文章:
- 和兼容的单例骨干模型
- 有状态单例模块
- 在什么情况下我们需要在javsacript中实现单例类
- 如何将一个单例传递给另一个对象,使该对象的所有实例都引用同一个单实例
- 如何在表单中引用跨度元素
- 使用Ext.Ajax.request使ExtJS单例返回对象
- 原始值被称为单例的现象是什么?
- AngularJS 模式单例在服务中未更新视图
- 创建命名空间 Javascript 单例类的对象
- 流星.js单例确认框
- Javascript 单例模式
- 如何将 AMD 模块从单例转换为实例
- 为什么这个javascript单例方法有效
- 扩展现有单例
- JavaScript 对象的单例行为
- ES2015 单例或服务提供商或模块,用于敲除.js组件
- 在单例模式中引用变量的根父级
- XHR 上传功能的单例引用不起作用
- 单例在JS/coffeescript中引用自身的优雅方式
- 在没有命名空间的情况下引用单例体到单例体,但是如何