Это возможно , но странно, и у вас, конечно, не будет доступа ни к какой внешней области анализируемой функции. Вызовите 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% случаев. Какова бы ни была реальная проблема, есть , вероятно , более элегантное решение.