Javascript 如何使用函数及其值作为参数?
我希望一个对象调用另一个对象或JSON(作为字符串或引用)中定义的函数,并在其中定义可变数量的值 下面是一个伪代码示例,说明了我要做的事情:Javascript 如何使用函数及其值作为参数?,javascript,Javascript,我希望一个对象调用另一个对象或JSON(作为字符串或引用)中定义的函数,并在其中定义可变数量的值 下面是一个伪代码示例,说明了我要做的事情: // function name and variable-length values definition const definition = { functionName: "function1", values: [ 1, "foo", 3.14 ] } // objectA calling the
// 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
may/should?引用成员变量中的定义
如何才能做到这一点
是否可以将其扩展,使
function1
是另一个对象的成员函数,该对象也在definition
中定义?您需要两种机制
首先使用方括号表示法访问对象属性:
objectA[definition.functionName]; // this will return the function you want
// This is the same as objectA.function1
其次,要将数组作为参数列表传递。为此,您可以使用期望参数列表为数组形式的参数:
objectA[definition.functionName].apply(objectA, definition.values);
// This is the same as objectA.function1(1, "foo", 3.14);
要使用的字符串:
const fx1=Function(definition.functionString)
const fx2=objectA[definition.functionName]
有几种方法可以调用fx,具体取决于fx如何处理参数
fx.apply(null,definition.values)
fx(…定义.值)
fx(定义值)
如果您有函数及其参数值的对象(即字典),只需访问字典中的匹配值即可获得函数。然后,为了使用其参数,可以使用spread运算符:
const字典={
函数1:{//例如
定义:(a,b,c)=>`{a:${a},b:${b},c:${c}`,
数值:[1,“foo”,3.14],
},
};
函数调用FunctionByName(名称){
const currFunction=字典[名称];
常量{定义,值}=函数;
返回定义(…值);
}
log(callFunctionByName('function1')代码>
//第二种方法,如果功能1不是objA的键
function function1(first, sec, third) {
console.log(first);
console.log(sec);
console.log(third);
}
const definition = {
functionName: "function1",
values: [ 1, "foo", 3.14 ]
}
eval(`${definition.functionName}(${definition.values[0]}, "${definition.values[1]}", ${definition.values[2]})`);
一切皆有可能,但我不明白你的问题?什么是objectA.function1(1,“foo”,3.14)代码>对象A在哪里?
function function1(first, sec, third) {
console.log(first);
console.log(sec);
console.log(third);
}
const definition = {
functionName: "function1",
values: [ 1, "foo", 3.14 ]
}
eval(`${definition.functionName}(${definition.values[0]}, "${definition.values[1]}", ${definition.values[2]})`);