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

如何使用JavaScript将文本转换为函数,javascript,Javascript,我有一个格式正确的文本字符串作为函数,我想将其转换为实际函数。文本字符串如下所示: function object_123(){ object_123_Action(); my_clicked(obj); } 除了“功能”和{}之外;所有其他文本都是动态构造的。i、 e.它可能永远不会包含对象\u 123\u Action(),但是,它将是类似的基本函数调用。唯一的问题是obj必须是分配给该功能的对象 基本上,我需要: this.func = eval(func_txt); //t

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

function object_123(){
   object_123_Action();
   my_clicked(obj);
}
除了“功能”和
{}
之外;所有其他文本都是动态构造的。i、 e.它可能永远不会包含
对象\u 123\u Action()
,但是,它将是类似的基本函数调用。唯一的问题是
obj
必须是分配给该功能的对象

基本上,我需要:

this.func = eval(func_txt); //to actually work.
其中func_txt是:

function object_123(){
   object_123_Action();
   my_clicked(this);
}
试试这个-

$("<script type='text/javascript'></script>").html(func_txt).insertAfter($("script"));
$(“”)html(func_txt).insertAfter($(“脚本”);
这项工作:

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


只需将函数包装在括号中。

字符串包含函数声明

this.func = eval("(" + func_txt ")" );
求值时,它在eval范围内创建一个
object_123
变量(您可以稍后调用该变量),并且不返回任何内容

如果要将函数赋值给this.func,则需要将声明转换为函数表达式。你可以用帕伦纸包起来

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

var func_txt=“函数对象”123(){\ 对象_123_Action()\ my_单击(obj)\ }"; this.func=eval(“+func_txt+”); var obj=“…”; 函数对象_123_动作(){ 警报(1); } 函数my_clicked(){ 警报(2); }
this.func()您可以将函数存储在对象上的数组中。 然后,在另一个函数中循环函数并执行它们

var myObj = { 'myfunctions': [ ] };
以及增加功能:

myObj.myFunctions.push (function () { /*function code here*/ });
或者,如果您已经有一个命名函数:

myObj.myFunctions.push (nameOfFunction);
要调用所有函数,请使用此函数(不要将此函数添加到myObj)

function executeMyFunctions(myObj){
对于(var i=0;i
如果可能的话,你应该

试试这个:

函数parseStringToFunction(func){
func=func | |'(function(){return null;})';
return(新函数('return'+func)());
};
var stringifyFunction='(函数(a,b){returna+b;})';
var callStringifyFunction=parseStringToFunction(stringifyFunction)(1,2);

警报(callStringifyFunction);//结果是3
eval调用有什么问题?实际上,当您将
函数(){}
包装在
()
中时,它就起作用了,即
eval((函数(a,b){returna+b;})”)(1,2)
。首先,这是jQuery,OP没有提到jQuery(没有jQuery标记)。第二,如果有很多脚本标记,那么会在每个脚本标记之后插入脚本,如果没有,则根本不会插入脚本。这非常完美,非常感谢,当我进行更改以将对象作为参数传递时。它的工作方式正是我需要它-再次感谢。