Как сохранить функцию в local storage?

Возникла заминка при работе с Local Storage, есть объект с переменными вида:

var Data = {
    ccurrentFunction: null,
    Name: "Павлик",
    crank: "Начинающий",
    cday: 1,
    ctime: 5,
};

В этот объект данные перезаписываются, а потом извлекаются при необходимости. Особенно важно свойство currentFunction.

В него сохраняется имя функции, которая будет вызываться при загрузке.

Вот пример:

function training(){
    currentFunction = training;
    // код JS
};

В объект передаётся имя функции:

Data.ccurrentFunction = currentFunction;

Далее просто перемещаем сформированный объект в Local Storage:

localStorage.setItem('savedata', JSON.stringify(Data));

В итоге объект сохраняется в хранилище, но без currentFunction, остальные есть.

Т.е. имя функции, воспринимаемое как функция, не преобразовывается в строку и вообще не записывается в хранилище.

Подскажите, пожалуйста, как можно передать имя функции в хранилище, чтобы потом извлечь его и вызвать.

Спасибо!


Ответы (1 шт):

Автор решения: Vasily

Вот что происходит при преобразовании объекта в строку и обратно:

const func1 = () => {
  console.log("функция")
}

const obj = {
  boolean: true,
  string: "строка",
  number: 12345,
  nul: null,
  undfd: undefined,
  inf: Infinity,
  date: new Date(),
  func1,
  func2: func1,
  func3: "func1"
}

const newObj = JSON.parse(JSON.stringify(obj))

console.log(newObj)
// {
//  "boolean": true,
//  "string": "строка",
//  "number": 12345,
//  "nul": null,
//  "inf": null,
//  "date": "2020-08-28T22:06:14.982Z",
//  "func3": "func1"
// }

если Вы используете в нем структуры данных Map, Set, классы типа Date, Infinity, undefined, функции, типизированные массивы и др.

Самым простым вариантом будет записывать название функции в объект как строку:

func3: "func1" 

и далее работать уже с ней.

→ Ссылка