Я задавал тот же вопрос несколько недель назад, хотя думаю, что сформулировал его немного по-другому.См. this.
По сути, вам нужно проанализировать строку functionname
по одной части за раз.
Кстати, используя код walk_path
из этогоответ, вот функция общего назначения, которую я написал для запуска функции из строки, включающей аргументы.
// run an arbitrary function from a string. Will attempt to parse the args from parenthesis, if none found, will
// use additional arguments passed to this function.
utils.runFunction = function (funcdef) {
var argPos = funcdef.indexOf('(');
var endArgPos = -1;
var args = undefined;
var func = funcdef;
if (argPos > 0) {
endArgPos = funcdef.indexOf(')', argPos);
if (endArgPos > 0) {
args = funcdef.substring(argPos + 1, endArgPos).split(',');
func = funcdef.substring(0, argPos - 1);
}
} else {
args = Array.prototype.slice.call(arguments, 1);
}
var func = walk_path(window, func);
return !args ? func() : func.apply(null, args);
};