在Javascript中将字符串(是一个函数)转换回函数

时间:2012-06-05 16:33:32

标签: javascript jquery

我在下面将此功能作为字符串。我如何将其转换回函数?我从JQuery事件中提取事件处理程序,我想将它们存储为字符串,然后将它们转换回来,因为它们将保存在mySQL中

function () {

    if (!GActiveClick) {
        return;
    }
    SaveProduct();
}

3 个答案:

答案 0 :(得分:16)

var func = new Function(theFunctionString);
func();

MDN

  

新函数([arg1 [,arg2 [,... argN]],] functionBody)

     

<强> 参数

     

arg1,arg2,... argN
  函数使用的名称作为正式参数名称。每个必须是一个字符串,对应于有效的JavaScript标识符或用逗号分隔的此类字符串列表;例如“x”,“theValue”或“a,b”。

     

<强>函数体
  包含包含函数定义的JavaScript语句的字符串。


更新:

这一切都是非常糟糕的做法! 你应该有一个泛型函数来获取构建你想要的参数。唯一改变的是参数。将这些参数存储在您拥有的数据库中。

答案 1 :(得分:2)

使用return时使用new Function()并执行它,就像这样

new Function('return ' + fn_string)();

示例:

&#13;
&#13;
function hackerAll(a, b) {
  var result = a*b
  return result
}

class Doggy{
  method1(){
    return 123123*342343
  }
}

var fn_string = hackerAll.toString()
var back_to_fn = new Function(`return ${fn_string}`)() //This restore the function with name, params and all, even es7 class works

var class_string = Doggy.toString()
var back_to_class = new Function(`return ${class_string}`)()

console.log('fn as it', hackerAll)
console.log('fn string', fn_string)
console.log('restored fn', back_to_fn)
console.log('restored class', back_to_class)
&#13;
&#13;
&#13;

答案 2 :(得分:1)

Javascript为函数提供new-keyword

var foo = new Function("arg", ... , "<implementation string>");

见这里例如...... http://www.permadi.com/tutorial/jsFunc/