【问题标题】:How to invoke a function, whose name is passed in Json object?如何调用一个函数,其名称是在 Json 对象中传递的?
【发布时间】:2010-10-31 07:07:01
【问题描述】:

我有一个 JSON 对象,其中包含一个称为回调的关键元素。

{
"id":34,
"description":"",
"item_id":4,
"callback":"addNew",
"filename":"0000072.doc",
"type":"News",
"ext":"doc",
"size":46592
}

我想调用javascript“addNew”函数。我试过了。

json.callback(json);

但不起作用。有什么想法吗?

【问题讨论】:

    标签: javascript json callback


    【解决方案1】:

    不要使用eval,使用

    window[json.callback](json); 
    

    如果函数在全局范围内。否则使用范围而不是窗口。

    【讨论】:

      【解决方案2】:

      假设它是一个全局函数(它不应该是):

      window[json.callback](json);
      

      如果您的代码结构良好,您可能会拥有一个包含 JSON 可以调用的所有函数的对象。

      var myObject = {
        func1: function myObject_func1_method(foo) {
          return 1;
        },
        func2: function myObject_func2_method(foo) {
          return 2;
        }
      }
      

      那么你可以:

      myObject[json.callback](json);
      

      【讨论】:

      • 这正是我正在寻找的,但我认为不需要命名这些函数。您将使用 func1、func2 标识符调用函数,因此名称 myObject_func1_method 和 myObject_func2_method 似乎完全没有必要。我错过了什么吗?
      【解决方案3】:

      使用eval(json.callback+'()');

      【讨论】:

      • 加油!两个减票。那家伙想帮忙!我投票给你!
      • 他可能尝试过,但他的建议很糟糕。这不仅是一个糟糕的答案,而且非常危险,应该相应地被否决。
      • 感谢塞尔吉奥的评论。对不起,如果我的解决方案不好。
      • @Garry +1 - 投票工具提示使用“有帮助”而非“努力”一词。
      • 我和@Thinker 不知道 eval 的危险。所以他的回答以及@David Dorward 和@Fabien Ménager 的回答都帮助我们了解了这一点。所以,思想家的回答带来了一些价值。很明显哪个答案更正确(+11 或 +9 vs -1),所以我认为没有必要用负票来惩罚他。我认为如此严厉的惩罚只会阻止用户提供答案。
      猜你喜欢
      • 1970-01-01
      • 2019-09-14
      • 1970-01-01
      • 2021-12-24
      • 2013-01-19
      • 1970-01-01
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多