将对象转换为函数的参数

时间:2018-12-17 02:57:17

标签: jquery ajax function parameters

我有一个带有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":"hello","url":"link.com"}转换或转换为函数的参数?

现在它正在这样运行:

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

如何使它像这样运行?

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

我想保持参数完整append(message,url),而不要求助于单个参数方法。我找不到很好的解决方案。

已编辑(简体)

如何更改Params对象:

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

与以下命令相同:

window['append']("hello","link.com")

1 个答案:

答案 0 :(得分:3)

data['function']对象的值扩展到您要调用的函数的参数列表中:

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

执行此操作的旧方法是改用.apply

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

请注意,在名为function的键中包含一个 object 非常令人困惑-人们可能希望那里有一个函数。您可能会考虑使用其他属性名称,例如parametersObj或类似的名称。

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

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