代码之家  ›  专栏  ›  技术社区  ›  Maciek

将对象转换为函数的参数

  •  0
  • Maciek  · 技术社区  · 6 年前

    我有一个带PHP的Ajax,它输出不同的函数来在jquery端运行。

    $.each(data['function'],function(key,value){
      window[key](value)
    }
    

    data['function'] 包含要运行的函数数据。

    例如:

    {"append":{"message":"hello","url":"link.com"}}
    

    将激活功能

    function append(message,url){...}
    

    问题是 {"message":"hello","url":"link.com"} 都包含在 message . 如何翻译或转换 “message”:“您好”,“url”:“link.com” 作为函数的参数?

    现在它是这样运行的:

    append({"message":"hello","url":"link.com"},undefined)
    

    什么解决方案可以使它像这样运行:

    append("hello","link.com")
    

    我想保持参数不变 append(message,url) 不采用单参数法。我找不到好的解决办法。

    编辑(简化)

    如何更改参数对象:

    var Params={"message":"hello","url":"link.com"}
    window['append'](Params);
    

    运行相同的:

    window['append']("hello","link.com")
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   CertainPerformance    6 年前

    data['function'] 对象进入要调用的函数的参数列表:

    append(...Object.values(data.function.message));
    

    老办法是用 .apply 而是:

    append.apply(undefined, Object.values(data.function.message));
    

    注意,有一个 对象 在一个名为 function -人们可能会期望函数出现在那里。您可以考虑使用不同的属性名,例如 parametersObj 或者类似的东西。

    如果函数名也是动态的(这是一种代码味道),则使用 Object.entries 要同时获取键(函数名)和值(对象):

    const [fnName, obj] = Object.entries(data.function);
    window[fnName](...Object.values(obj));