JSON - это средство для кодирования произвольных объектов данных в строки, которые могут быть впоследствии проанализированы в исходном объекте. Таким образом, JSON кодирует только «простые» типы данных: null
, true
, false
, Number
, Array
и Object
.
JSON не поддерживает какие-либо типы данных, которые имеют специализированное внутреннее представление, например Date, Stream или Buffer.
Чтобы увидеть это в действии, попробуйте
typeof JSON.parse(JSON.stringify(new Date)) // => string
Поскольку их базовое двоичное представление не может быть закодировано в строку, JSON не поддерживает кодирование функций.
JSON.stringify({ f: () => {} }) // => {}
Несмотря на то, что вы указали, что не хотите этого делать, единственный способ достичь вашей цели - это сериализовать вашу функцию в ее исходный код (представленный строкой), например:
const determineConfig = function(condition){
if(condition) {
return 'config1';
}
return 'config2';
}
{
determineConfig: determineConfig.toString()
}
И либо exec
, либо иным образом повторно создать экземпляр функции на принимающей стороне.
Я бы порекомендовал не делать этого, так как exec()
очень опасен и поэтому устарел.