我有一个上下文菜单,将触发不同的JavaScript函数.选择函数的天真解决方案如下所示:
function(action, el, pos) {
switch(action)
{
case "export_selected_to_excel":
exportSelectedToExcel(el);
break;
etc..
}
}
Run Code Online (Sandbox Code Playgroud)
我希望有一个函数映射,以便我可以将metod减少到与此类似的东西:
function(action, el, pos) {
menuAction[action](el);
}
Run Code Online (Sandbox Code Playgroud)
我像这样定义数组:
function exportSelectedToExcel(id){
//stuff...
}
var menuAction = new Array();
menuAction["export_selected_to_excel"] = exportSelectedToExcel;
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,感觉像一个合理的解决方案.
在javascript中有这样的缺点吗?
还有更好的方法吗?
你的想法很好,但你不应该使用数组作为关联映射,因为它们不是关联的(参见例如Mastering Javascript Arrays)。当您这样做时,var a = []; a["x"] = y您实际上将该属性分配x给了对象 a。所以,事后成立:a.length == 0 and a.x == y.
您应该只用Array对象替换以获得关联映射:
var menuAction = {};
menuAction["export_selected_to_excel"] = exportSelectedToExcel;
// or
menuAction.export_selected_to_excel = exportSelectedToExcel;
// or
menuAction.export_selected_to_excel = function(id) {...};
Run Code Online (Sandbox Code Playgroud)
或者:
var menuAction = {
export_selected_to_excel: exportSelectedToExcel,
export_x: exportX // etc
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5992 次 |
| 最近记录: |