如何将stringArray转换为librarySystem的函数指针集合

时间:2017-08-27 18:55:01

标签: javascript arrays function-pointers apply

目前我正在编写一个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.

3 个答案:

答案 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];

小提琴  https://jsfiddle.net/dk_dragonknight/yhL188se/

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