10

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

function () {

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

3 回答 3

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

MDN

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

参数

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

functionBody
包含构成函数定义的 JavaScript 语句的字符串。


更新:

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

于 2012-06-05T16:35:19.497 回答
3

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

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

例子:

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)

于 2018-01-23T00:51:24.337 回答
1

Javascript 为函数提供 new- 关键字

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

例如,请参见此处... http://www.permadi.com/tutorial/jsFunc/

于 2012-06-05T16:41:22.170 回答