【发布时间】:2010-10-15 23:57:21
【问题描述】:
有什么方法可以将函数作为 json 字符串传递(使用 JSON.stringify 转换),将其发送到另一个函数,解析 json,然后执行 json 中的函数?我正在使用 jquery 和 javascript。
【问题讨论】:
标签: javascript jquery json observer-pattern
有什么方法可以将函数作为 json 字符串传递(使用 JSON.stringify 转换),将其发送到另一个函数,解析 json,然后执行 json 中的函数?我正在使用 jquery 和 javascript。
【问题讨论】:
标签: javascript jquery json observer-pattern
是的,你可以。有很多方法可以做到这一点。
并且没有必要使用这里指出的“邪恶” eval 函数(请 yahoogle 为什么应该避免它):http://javascript.about.com/library/bleval.htm
var tmpFunc = new Function(codeToRun);
tmpFunc();
在任何阶段是否是 JSON 都应该是无关紧要的。
【讨论】:
是的,您可以使用 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();
【讨论】:
这是一个有效的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();
});
【讨论】:
【讨论】:
我创建了 JSONfn 的一个分支,它使您能够对对象及其原型进行字符串化和解析。在我的基本测试中,它运行良好。
【讨论】:
我发现在处理 JSON 文件中的函数时使用 JavaScript call() 函数很有帮助。
var returnData = theJsonData.theFunction.call();
console.log(returnData); // prints any return data
希望对路过的人有所帮助!
【讨论】:
不,你不能这样做。函数不能被 JSON 序列化。无需将对象转换为 JSON,您可以直接将其传递给其他函数,而无需调用 JSON.stringify。
【讨论】: