如何将字符串数组转换为库系统的函数指针集合

How to convert stringArray to function pointer collection for 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.

您可以使用这 2 个函数创建一个 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);

创建函数变量并在数组中分配它们就可以了。

如下。

var g = function(){
 return 'hi!';
}

var n = function(){
 return 'name';
} 

function greetingToName (greet, name) {
  console.log( greet() + ' ' + name() );
 }



var stringArray = [g,n];

Fiddle https://jsfiddle.net/dk_dragonknight/yhL188se/

在这里看了大家的解决方案后,我得到了很大的启发,所以我在不改变函数上下文的情况下想出了这个解决方案,你们觉得怎么样?

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);