【问题标题】:mapping strings to functions in javascript将字符串映射到javascript中的函数
【发布时间】:2012-07-24 09:42:06
【问题描述】:

我想根据 HTML 元素列表中的 HTML 属性的值来实现,我可以根据该属性的字符串值调用不同的 javascript 函数。

基本上我想要的是 javascript / jQuery 中字符串 => 函数的映射。 (然后当然可以调用这个函数)。

这可能吗?

【问题讨论】:

    标签: javascript jquery html map


    【解决方案1】:

    是的:

    var fnMap = {
      "foo": function() { ... },
      "bar": function() { ... },
      // ...
    };
    

    如果你的函数已经存在,你可以通过名字来引用它们:

    var fnMap = {
      "foo": someFunction,
      "bar": otherFunction,
      // ...
    };
    

    你可以混合使用这两种风格。

    根据值调用其中一个函数:

    fnMap[ value ]( param, param, ... );
    

    【讨论】:

    • 这正是我所建议的,除了我可能会将实际调用包装在 if (fnMap[value]) { fnMap[value](); } 中,这样就不会出现参考错误.也就是说,参考错误可能有助于正确的调试工具(只是不是在生产时)。
    • 是的,这是一个很好的观点,@Norguard - 当然这取决于情况;如果值来自<select> 元素,那么可以安全地假设它没问题,但是这样的检查非常便宜,没有理由不这样做。
    • 当然。我建议它的原因不一定是因为select 交易,而是因为字符串引用函数的模式非常容易(如果它们被封闭),因此相对安全,可以避免其他类似方法的陷阱(如eval),定期执行此操作,例如,歌曲项目列表,使用值中的函数播放歌曲 - 或在容器对象的值中,带有侦听器和名称目标项目中的歌曲本身(用作参数),没有理由不做这样的事情,它会让你的 HTML 闪闪发光
    • 这太棒了!正是我想要的
    • 我正在尝试做类似的事情,而是为 var 创建一个类型,以便其他方法可以知道会发生什么。我试过类似:function foo(): string { return prompt("Input","foo"); } function bar(): string { return prompt("Input","bar"); } var params: { [index: string]: () => string; } = { "foo": foo(), "bar": bar() } 但没有爱,有什么想法吗? Woops 试图在打字稿中做到这一点......可能有点不同
    猜你喜欢
    • 1970-01-01
    • 2012-01-23
    • 2016-10-15
    • 2011-02-14
    • 1970-01-01
    • 2021-11-15
    • 2018-07-09
    • 2022-08-16
    • 1970-01-01
    相关资源
    最近更新 更多