【发布时间】:2011-12-08 13:44:59
【问题描述】:
对于 Javascript 应用程序,我需要能够让用户保存对象的状态。这涉及保存一组以前动态或通过 GUI 创建的自定义函数,并在以后加载这些存储的函数。本质上我需要序列化和反序列化函数。
现在我通过使用 Function 对象的 .toString() 方法来实现序列化部分:
func.toString().replace('"', '\"').replace(/(\r)/g, ' ').replace(/(\n)/g, ' ').replace(/(\t)/g, ' ')
这给了我像这样美丽的“序列化”函数(注意该函数未命名):
"function (someParameter) {this.someFunctionName(return 'something';}"
反序列化这是我挣扎的地方。我目前反序列化函数的最佳解决方案是:
var func = eval( 't =' + so.actions[i].func);
请注意我在调用eval() 之前如何在序列化函数前面加上t =。我不喜欢这样做,因为它会创建一个全局变量,但我找不到解决方法。如果不添加此内容,我会收到“SyntaxError: Unexpected token (”。添加 var t = 时,eval() 不会返回函数,而是返回 undefined。
是否有其他方法可以“反序列化”未命名的函数?
PS:我知道在用户输入上使用 eval() 的安全隐患。在可预见的未来,我是这个软件的唯一用户,所以目前这不是问题。
【问题讨论】:
标签: javascript