目前我正在编写一个librarySystem
下面的代码示例中有一个stringArray [' greet',' name']作为依赖项,但我需要将此stringArray用作函数数组进入 greetingToName()通过使用apply(),有没有办法将stringArray转换为一个函数数组?
function greet(){
return 'hi!';
}
function name(){
return 'name';
}
function greetingToName (greet, name) {
console.log( greet() + ' ' + name() );
}
var stringArray = ['greet','name'];
greetingToName.apply(null, stringArray); // this is not working properly , because it passes 'greet' and 'name' as string into function, instead of function pointers.
答案 0 :(得分:0)
您可以使用这两个函数创建Object
,并根据需要传递字符串,然后按名称查看对象内部。
const posiableFuncs = {
greet: () => {
return 'hi!';
},
name: () => {
return 'name';
}
};
function greetingToName(greet, name) {
console.log(posiableFuncs[greet]() + ' ' + posiableFuncs[name]());
}
const stringArray = ['greet', 'name'];
greetingToName.apply(null, stringArray);

答案 1 :(得分:0)
创建函数变量并将它们分配到数组中就可以了。
如下所示。
var g = function(){
return 'hi!';
}
var n = function(){
return 'name';
}
function greetingToName (greet, name) {
console.log( greet() + ' ' + name() );
}
var stringArray = [g,n];
答案 2 :(得分:0)
在我读完所有人的解决方案之后,我获得了巨大的灵感,因此我在不改变功能背景的情况下想出了这个解决方案,你们有什么想法?
var posiableFuncs = {
greet : function(){
return 'hi! ';
},
name : function(){
return 'Mr. Awesome!';
}
}
function greetingToName (greet, name) {
console.log( greet() + ' ' + name() );
}
var stringArray = ['greet','name'];
// copy the functions and assign into arrayOfFunctions variable based on stringArray
var arrayOfFunctions = stringArray.map(function(functionName){
return posiableFuncs[functionName];
});
greetingToName.apply(window, arrayOfFunctions);