#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 ")");
этого .