有没有办法可以将函数作为json字符串传递(使用JSON.stringify进行转换),将其发送到另一个函数,解析json然后执行json中的函数?我正在使用jquery和javascript。
答案 0 :(得分:49)
是的,你可以。有很多方法可以做到这一点。
并且没有必要使用“邪恶”评估函数(请yahoogle为什么应该避免它),如下所示:http://javascript.about.com/library/bleval.htm
var tmpFunc = new Function(codeToRun);
tmpFunc();
在任何阶段是否都是JSON应该是无关紧要的。
答案 1 :(得分:22)
这是一个有效的example
基本上,你必须小心这种事情。如果您使用现有的javascript函数,将其转换为字符串,并对其进行评估,则可能会遇到函数重新声明问题。如果您只是从服务器中获取一个函数字符串并且想要运行它,那么您可以像我在那个jsfiddle上那样做:
<强>的Javascript 强>
var myFunc = "function test() {alert('test');}";
$(document).ready(function() {
var data = new Object();
data.func = myFunc;
var jsonVal = $.toJSON(data);
var newObj = $.evalJSON(jsonVal);
eval(newObj.func);
test();
});
答案 2 :(得分:19)
是的,您可以使用toString()
方法将函数转换为字符串。
Here's an example显示将函数转换为字符串并返回函数:
var myfunc = function () {
alert('It works!');
}
var as_string = myfunc.toString();
as_string = as_string.replace('It works', 'It really works');
var as_func = eval('(' + as_string + ')');
as_func();
答案 3 :(得分:4)
答案 4 :(得分:3)
我创建了一个JSONfn的分支,它使您能够对对象及其原型进行字符串化和解析。在我的基本测试中它运行良好。
答案 5 :(得分:0)
我发现在处理JSON文件中的函数时使用JavaScript call()函数很有帮助。
var returnData = theJsonData.theFunction.call();
console.log(returnData); // prints any return data
我希望能对任何人留下帮助!
答案 6 :(得分:-8)
不,你不能这样做。函数不能是JSON序列化的。您可以直接将其传递给另一个函数,而无需将对象转换为JSON,而无需调用JSON.stringify。