Проблема с параметрами при оценке функции Javascript по имени строки

#javascript #string #function #eval

Вопрос:

У меня есть строка funcName , которая содержит имя (существующей) функции javascript. Кроме того, у меня есть строка funcParams , которая содержит список параметров для вызываемой функции. Я хочу запустить эту функцию по этим параметрам. Я использую eval(funcName)(funcParams) в разных местах. Вызываемые функции могут быть разными, и, следовательно, количество входных параметров для каждой функции различается.

Например, допустим, я получил:

 var number = 5;
function succ(x) { return x 1;}
function average(x,y) {return (x y)/2; }
 

Возможно , у меня есть funcName = "succ" и funcParams="3" , в этом случае, я хочу подать succ(3) заявление . Но я мог бы funcName = "average" и funcParams="3,5" . В обоих случаях funcParams будет одна строка, но я хочу, чтобы это была группа параметров. Должен ли я попытаться определить funcParams как массив? С помощью .split(",") ? Или есть лучший подход? Я хочу иметь общий способ запуска funcName funcParams , независимо от количества параметров.

Еще одна проблема, с которой я сталкиваюсь, заключается в том, что, например, некоторые параметры могут быть именами переменных. Например, funcParams="3,number" И. funcName="average" Даже если я решил свою первую проблему и сумел отделить 3 и number , они все равно рассматриваются как строка "number" , а не как переменная с именем number . Есть какие-нибудь идеи, как решить и эту проблему?

Я надеюсь, что мне удалось четко выразить себя по этим 2 вопросам.

Редактировать: все, что внутри funcParams , не завернуто "" , не должно автоматически преобразовываться в строку. Если funcParams="5,"5",number" тогда первое 5 должно быть целым числом, второе "5" -строкой, а третье number — именем переменной.

Комментарии:

1. Итак, вы пытались использовать eval()? Должна быть простая концентрация строк

2. независимо от того, что вы делаете с функциональными парами, eval берите строку и оцениваете ее. Так что вам понадобится строка. В чем дело eval(funcName "(" funcParams ")"); ?

3. Я бы пересмотрел подход-похоже, вы пытаетесь создать универсальную систему обработки выражений с возможностью добавления функций. ИМО я бы просто (а) использовал существующий модуль, такой как mathjs, или (б) продублировал это усилие и написал простой анализатор выражений, который проще, чем вы могли бы ожидать.

4. Спасибо. У меня была очень глупая синтаксическая ошибка. Я использовал eval(funcName)(funcParams); вместо eval(funcName "(" funcParams ")"); этого .