-6ren">
gpt4 book ai didi

javascript - 在 json 中存储函数 [Javascript/Coffeescript]

转载 作者:行者123 更新时间:2023-11-30 17:28:36 25 4
gpt4 key购买 nike

我有一个配置,我想在其中确定一个函数,以便稍后在某些代码中使用:

get_config = () ->
{
"function" : (stuff) ->
stuff + "more stuff"
}

此代码在某处被调用,配置以 json 格式存储在文件中,使用以下辅助函数:

stringifyWithFunctions = (object, replacer, spacing) ->
stringify_functions = (key, val) ->
if replacer
if typeof val == 'function'
return replacer(key, val.toString())
else
return replacer(key, val)
else
if typeof val == 'function'
return val.toString()
else
return val

return JSON.stringify(object, stringify_functions, spacing)

我最终得到一个如下所示的 json 对象:

{ 'function' : 'function (stuff) {return stuff + "more stuff"}' }

但是,我想不出一个好的方法来稍后加载这个函数。

loaded_function = eval(config['function'])

导致错误“意外的 token (”,我觉得好像有更简洁的方法可以做到这一点。有什么想法吗?

最佳答案

如果配置 JSON 存储为静态文件并反复使用,一个干净的解决方案是简单地从 JSON 中的函数周围删除引号,然后执行此操作:

var get_config = eval("(" + json_data + ")");

JSON 需要用括号括起来才能计算,这就是您收到错误的原因。如果配置 JSON 经常需要被字符串化,那么还有几个其他选项。您可以这样做来调用函数:

var get_config = eval("(" + json_data + ")");

eval("(" + get_config.afunction + ")")("this is passed to the function");

或者您可以使用 JSONfn 插件 ( http://www.eslinstructor.net/jsonfn/ ) 对 JSON 而不是您正在使用的函数进行字符串化,然后像上面那样评估它。 JSONfn 插件能够像您需要的那样序列化函数。

这里有一个 jsFiddle,它显示了上面正在使用的代码:http://jsfiddle.net/4UP53/

关于javascript - 在 json 中存储函数 [Javascript/Coffeescript],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23685210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com