我有一个连接到我的js脚本的上传处理程序。
(这个上传处理程序是用c ++编写的,因此我无法传递js对象)
此上传处理程序启动上传并立即返回UID(基于当前时间戳,以毫秒为单位。如下所示:
var transferUid = fileTransfers.addFileTransfer(sourcePath,destination);
我想为此添加一个回调函数。 转移完成后。 完成后自动执行此js函数:
filetransfersfinished(uid){...}
做这样的事情是合理的:
var finishFunctions = [];
finishfunctions [transferUid] = function(){/*callbacks*/}
transferUid可能像184548178452 ......
并在调用自动函数时调用它:
filetransfersfinished(uid){ finishfunctions[uid](); }
或者你能想到更好的解决方案吗?
答案 0 :(得分:2)
在chrome中使用堆分析工具,为小内容提供一个巨大的数组似乎不会导致问题或堆分配的高峰。
已确认here为"稀疏阵列与完整阵列",并与this jsperf确认。
实质上:稀疏数组很慢,但预计不会比对象属性慢。
无论如何,我建议您使用对象,因为它更直观:
最好的方法是使用一个对象(javascript等同于"关联数组"),如注释中所指出的那样。 有很多方法可以做到这一点,但为了尽可能地保留你使用的语法,我会这样做:
var finishFunctions = {};
finishfunctions [transferUid.toString()] = function(){/*callbacks*/}
然后你的回调:
filetransfersfinished(uid){ finishfunctions[uid.toString()](); }
注意:使用此方法,您可以为您的uid使用任何方便的格式,而不仅仅是数字。如果它对您有任何价值。