【问题标题】:Store an array of functions JS JSON存储函数数组 JS JSON
【发布时间】:2014-01-20 03:23:04
【问题描述】:

首先,我使用一些测试(例如:“alert("Hello")")创建了一个函数数组,并使用 Function(text) 方法将该文本转换为匿名函数。例如

someArray[0] = Function('alert("Hello")');

然后我可以像这样运行这个函数:

someArray[0]();

这很好用,但是我需要能够将这个数组存储在本地存储中,以前我一直在使用 JSOn.Stringify 来存储数组,但是似乎一旦我存储了数组并从存储中检索它,我就无法再运行了函数。

我的问题是如何存储函数数组以便稍后检索和运行它们?

【问题讨论】:

  • 为什么要将字符串转换为函数?这些字符串是从哪里来的?您可以将这些字符串存储在本地存储中的对象中,然后在取回它们时再次调用new Function?不过,我建议创建命名函数并将其名称保存在您的对象中。
  • 根据对 [a similar StackOverflow question][1] 的回复,JSON 无法存储函数。 [1]:stackoverflow.com/questions/8328119/…
  • 这通常是个坏主意,而且会造成安全漏洞。
  • 您试图实现什么导致您将函数存储为字符串?我的幼稚建议是,如果可以找到另一种方法,但该方法没有利用具有固有安全风险的方法,则不要以这种方式执行此操作。
  • 我正在用 JavaScript 编写一个模拟器,您可以在其中设计自己的 CPU,这是您可以为您的 CPU 创建指令集的方法,正如其他人提到的,我将它们存储为字符串并在运行时使用 eval。由于根本不存储任何个人身份信息,因此不再需要担心安全问题。

标签: javascript function web local-storage


【解决方案1】:

您可以将函数 base64 编码为字符串。将其保存在 json 文件中。将 json 文件加载到您的页面/应用程序中。 base64 解码。

然后 eval() 来注册你的新函数。

//load json data from file
var jsonData = {};

//Create string representation of function
var s = "function " + atob(jsonData.func);

//"Register" the function
eval(s);

//Call the function
//'test' is the name of the function in jsonData.func
test();

//load json data from file
var jsonData = {};

//create function from base64 decode
var fn = Function(atob(jsonData.func));

//test
fn();

**当然,对于每个示例,函数的格式都需要不同。

Is there a way to create a function from a string with javascript?

【讨论】:

  • 如果您不能信任 JSON 文件,使用 eval() 会带来安全风险。
【解决方案2】:

JSON 不知道函数, 你最好的猜测是存储 一个字符串数组,当你 想要使用它们将它们传递给函数 对象作为参数。

【讨论】:

  • 干杯,希望避免这种方法,但哦 :)
  • 哈哈是的,很抱歉,我无法进一步帮助您,除非您重写库。这是不可能的xP
猜你喜欢
  • 2015-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-21
  • 1970-01-01
  • 2023-01-17
  • 2019-01-26
  • 2014-07-04
相关资源
最近更新 更多