Можно ли переопределить Function.prototype.to JSON, чтобы JSON .stringify мог работать с функциями? - PullRequest
0 голосов
/ 15 апреля 2020

Или, может быть, даже переопределить некоторую часть JSON .parse для разбора функций? Это не зависит от времени, я построил обходные пути в своем коде, но с помощью функции eval вы могли бы подумать, что превращение функций в строки и обратно было бы несложно.

1 Ответ

0 голосов
/ 15 апреля 2020

Это возможно , но странно, и у вас, конечно, не будет доступа ни к какой внешней области анализируемой функции. Вызовите toString, чтобы получить исходный код функции, обрезать скобки, чтобы у вас было только тело функции, а Function.prototype.toJSON вернуть его. Затем при разборе вызовите new Function в строке:

Function.prototype.toJSON = function() {
  // trim out beginning and end {}s
  return this.toString().match(/[^{]*(?=}$)/)[0];
};

const fn = () => {
  console.log('foo');
};
const json = JSON.stringify({
  str: 'str',
  fn
});
console.log(json);
const parsed = JSON.parse(json);
const parsedFn = new Function(parsed.fn);
parsedFn();

Но не должно быть необходимости делать это в 99% случаев. Какова бы ни была реальная проблема, есть , вероятно , более элегантное решение.

...