如何使用JavaScript将文本转换为函数

时间:2015-09-16 11:26:15

标签: javascript

我有一个正确格式化为函数的文本字符串,我想将其转换为实际函数。文本字符串如下所示:

function object_123(){
   object_123_Action();
   my_clicked(obj);
}

除了“function”和{}之外;所有其他文本都是动态构造的。即它可能永远不会包含object_123_Action(),但它会是类似的基本函数调用。唯一的问题是obj将需要成为分配函数的对象。

基本上,我需要:

this.func = eval(func_txt); //to actually work.

func_txt在哪里:

function object_123(){
   object_123_Action();
   my_clicked(this);
}

5 个答案:

答案 0 :(得分:1)

您的字符串包含函数声明。

评估时,它会在eval范围内创建一个object_123变量(稍后可以调用)并且不返回任何内容。

如果要将函数分配给this.func,则需要将声明转换为函数表达式。你可以把它包裹在parens中。

this.func = eval("(" + func_txt ")" );

var func_txt = "function object_123(){\
   object_123_Action();\
   my_clicked(obj);\
}";

this.func = eval("(" + func_txt + ")");
var obj = "...";

function object_123_Action() {
  alert(1);
}

function my_clicked() {
  alert(2);
}


this.func();

答案 1 :(得分:0)

您可以将函数存储在对象的数组中。  然后,循环执行另一个函数中的函数并执行它们。

var myObj = { 'myfunctions': [ ] };

并添加功能:

myObj.myFunctions.push (function () { /*function code here*/ });

或者如果您已经有一个命名函数:

myObj.myFunctions.push (nameOfFunction);

要调用所有函数,请使用此函数(不要将此函数添加到myObj)

function executeMyFunctions (myObj) {
    for (var i = 0; i  < myObj.myFunctions.length; i++) {
        myObj.myFunctions[i]();
    }
}

如果可以avoid using eval,你应该这样做。

答案 2 :(得分:0)

试试这个:

function parseStringToFunction(func) {
    func = func || '(function(){return null;})';
    return (new Function('return ' + func)());
};

var stringifyFunction = '(function(a, b) { return a+b; })';

var callStringifyFunction = parseStringToFunction(stringifyFunction)(1, 2);
alert(callStringifyFunction); // results is 3

另请阅读:detail about eval() and new Function()

答案 3 :(得分:-1)

试试这个 -

$("<script type='text/javascript'></script>").html(func_txt).insertAfter($("script"));

答案 4 :(得分:-1)

这有效:

assert( eval("(function(a, b) { return a+b; })")(1, 2) == 3 )

请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#eval_as_a_string_defining_function_requires_(and)_as_prefix_and_suffix

只需将功能包装在parens中。