我希望一个对象调用在另一个对象或JSON中定义的函数(作为字符串或引用),其中也定义了一个可变的值。
下面是我要做的一个伪代码示例:
// function name and variable-length values definition
const definition = {
functionName: "function1",
values: [ 1, "foo", 3.14 ]
}
// objectA calling the function with the values
// objectA.definedFunction(definedValues);
// objectA.[functionName]([val1], [val2], ..., [valN]);
objectA.function1(1, "foo", 3.14);注:objectA可能/应该?引用成员变量中的定义。
如何才能做到这一点?
是否可以将其扩展为function1是在definition中也定义的另一个对象的成员函数?
发布于 2021-01-21 07:05:32
你需要两种机制。
首先,使用方括号符号访问对象属性:
objectA[definition.functionName]; // this will return the function you want
// This is the same as objectA.function1第二,您希望将数组作为参数列表传递。为此,您可以使用Function.prototype.apply,它期望数组形式的参数列表:
objectA[definition.functionName].apply(objectA, definition.values);
// This is the same as objectA.function1(1, "foo", 3.14);发布于 2021-01-21 07:08:56
string to function:函数
const fx1 = Function(definition.functionString)
const fx2 = objectA[definition.functionName]有一种调用fx的方法,取决于fx处理参数的大小。
fx.apply(null, definition.values)
fx(...definition.values)
fx(definition.values)发布于 2021-01-21 07:14:04
如果您有一个函数及其参数值的对象(即字典),则只需访问字典中的匹配值即可获得该函数。
然后,为了使用它的参数,可以使用spread运算符:
const dictionary = {
function1: { // For example
definition: (a, b, c) => `{ a: ${a}, b: ${b}, c: ${c} }`,
values: [1, "foo", 3.14],
},
};
function callFunctionByName(name) {
const currFunction = dictionary[name];
const { definition, values } = currFunction;
return definition(...values);
}
console.log(callFunctionByName('function1'));
https://stackoverflow.com/questions/65822455
复制相似问题