我有一个带有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")
答案 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));