我有一个带PHP的Ajax,它输出不同的函数来在jquery端运行。
$.each(data['function'],function(key,value){ window[key](value) }
data['function'] 包含要运行的函数数据。
data['function']
例如:
{"append":{"message":"hello","url":"link.com"}}
将激活功能
function append(message,url){...}
问题是 {"message":"hello","url":"link.com"} 都包含在 message . 如何翻译或转换 “message”:“您好”,“url”:“link.com” 作为函数的参数?
{"message":"hello","url":"link.com"}
message
“message”:“您好”,“url”:“link.com”
现在它是这样运行的:
append({"message":"hello","url":"link.com"},undefined)
什么解决方案可以使它像这样运行:
append("hello","link.com")
我想保持参数不变 append(message,url) 不采用单参数法。我找不到好的解决办法。
append(message,url)
如何更改参数对象:
var Params={"message":"hello","url":"link.com"} window['append'](Params);
运行相同的:
window['append']("hello","link.com")
将 data['function'] 对象进入要调用的函数的参数列表:
append(...Object.values(data.function.message));
老办法是用 .apply 而是:
.apply
append.apply(undefined, Object.values(data.function.message));
注意,有一个 对象 在一个名为 function -人们可能会期望函数出现在那里。您可以考虑使用不同的属性名,例如 parametersObj 或者类似的东西。
function
parametersObj
如果函数名也是动态的(这是一种代码味道),则使用 Object.entries 要同时获取键(函数名)和值(对象):
Object.entries
const [fnName, obj] = Object.entries(data.function); window[fnName](...Object.values(obj));