如何将localStorage项设置为函数?

时间:2016-04-25 05:49:51

标签: javascript html5 function local-storage

我想将localStorage项目设置为函数,但是当我这样做时会将其保存为字符串。

localStorage.getData = function (key="def") {
  let data = null;

  if (this[key] && !_this.isDataAvailableInList(this[key])) {
    data = this[key].data;
  }

  return data;
};

上述函数存储为字符串而不是函数。

注意:请不要提供替代方案或其他建议,我很清楚备选方案,并且很想知道它是如何工作的。我没有提供整个上下文所以我们假设我需要将localStorage项目设置为函数

2 个答案:

答案 0 :(得分:2)

不幸的是,本地存储只是关于字符串。甚至数组或其他数据也总是转换为字符串。

对于没有周期的大多数死数据,您当然可以使用JSON.stringifyJSON.parse,但在其他情况下或者使用JSON不支持的代码或其他Javascript实体(例如Infinity或{{ 1}})你需要自己序列化和反序列化。

Javascript提供undefined,因此您可以将函数eval存储为首先将其转换为f的字符串,然后使用f+""取回函数。 但是这不能用于闭包,而且你甚至无法知道函数是否确实是Javascript中的闭包(如果尝试序列化闭包的不可能的操作,你甚至不能引发错误。)

答案 1 :(得分:1)

通过.toString()将函数转换为字符串。阅读时,请通过new Function(myString)将其转换回函数。

示例:

没有pamameters:

(new Function('var a = 0; return a + 1;'))() === 1

带参数:

(new Function(['param0'],'var a = param0; return a + 1;'))(100) === 101

注意:原始功能的范围将丢失。