В настоящее время я пишу библиотечную систему

И есть stringArray ['greet', 'name'] в качестве зависимостей в примере кода ниже, однако мне нужно использовать этот stringArray как массив функций, передаваемых в приветствиеToName () с помощью 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
Chun Pin Chen 27 Авг 2017 в 21:55

3 ответа

Лучший ответ

После того, как я прочел здесь все решения, у меня появилось огромное вдохновение, поэтому я придумал это решение, не меняя контекст функции, как вы думаете, ребята?

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);
0
Chun Pin Chen 27 Авг 2017 в 20:00

Вы можете создать 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);
0
felixmosh 27 Авг 2017 в 19:09

Создание переменных функции и назначение их в массиве сделают свое дело.

Что-то, как показано ниже.

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/

0
pratikpawar 27 Авг 2017 в 19:10