关于javascript:如何在localStorage API HTML5中保存函数

How to save functions in localStorage API HTML5

本问题已经有最佳答案,请猛点这里访问。

我试图将数组保存在localStorage中,但它在数组的对象中包含函数(称为promise),但当我使用JSON.stringify将数组转换为字符串时,问题出现了,显然所有函数都被删除,当我将字符串解析为JSON Object时,它没有方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* Example code */

var storage = {
    getListUsers: function(){
        return {
            name: 'name',
            age: 'age'
        }
    },
    active: true,
    data: []
}

var convert = JSON.stringify(storage);
localStorage.setItem('data', convert);

最好的问候。


很少观察到:

  • 函数在JSON中不存在。查看官方文件json.org。
  • 一个值可以是双引号中的string,或者number,或者true,或者false,或者null,或者object,或者array,但是not a method
  • 为什么在JSON对象内部使用方法?方法基本上用于操作数据。您也可以使用JSON对象之外的数据。

可以使用JSON.stringifyreplacer函数将函数转换为字符串,同时转换为JSON字符串。

演示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var storage = {
    getListUsers: function() {
        return {
            name: 'name',
            age: 'age'
        }
    },
    active: true,
    data: []
}

var json = JSON.stringify(storage, function(key, value) {
  if (typeof value === 'function') {
    return value.toString();
  } else {
    return value;
  }
});

console.log(json);


您可以将应该设置在localStorage的javascript设置为元素的.textContent,将元素的.textContent设置为localStorage。然后,您可以在不同的元素中设置相同的文本,或者将文本转换为可以发布到其他浏览上下文或服务器的data URI

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<script id="storage">
/* Example code */

var storage = {
  getListUsers: function() {
    return {
      name: 'name',
      age: 'age'
    }
  },
  active: true,
  data: []
}


var convert = document.getElementById("storage");

localStorage.setItem("data", convert.textContent);

console.log(localStorage.getItem("data"));