请问json配置中如何配置Function对象?

请问json配置中如何配置Function对象?

在做一个配置的时候需要把回调函数也配置到json中不知道如何转化,请高手指点!

阅读 8.4k
3 个回答

写成字符串加参数,仿照JSONP式调用

代码的话,大概是这样

var jsonObj = {
  callFn: "callback('a', 'b')"
}
var callback = function(a,b) {
  console.log(a,b)
}
var newScript = document.createElement('script');
  newScript.type = 'text/javascript';
  newScript.innerHTML = jsonObj.callFn;

document.body.appendChild(newScript);

根据评论我再说一下吧,可以把函数写到 json 配置中,举个不恰当的例子:

clipboard.png

问题是为什么要这么做?一般不会把 函数主体写到JSON里面,一般会这么写:

clipboard.png

对,这个某个node下json的依赖,它这里面的每一项都是一个JS函数(确切的说是包),主体逻辑都是写在包里面

很简洁,不会搞乱逻辑。

我这边也简述一下nodejs 是怎么通过json 来寻找配置的JS文件吧。

首先node会解析当前路径下的package.json 文件, 从devDependencies 里面获取其配置(依赖)的函数(包)。

然后node在通过寻径函数(具体细节不说)找到包所在的位置,读取该路径下的package.json文件的 main属性,这个

main就是函数(包)的文件主体,你在里面怎么写都可以。

而不推荐直接把主体写在json里面的理由也简单

1) 多且乱

2) 一旦出现两个函数之间有嵌套关系,就非常难弄。

等等。。。

这个问题一开始我也是想错方向了,后来想想题主说的和nodejs的package.json 做的事情实在是太像了。不知道

题主是不是就是想要这个?

尝试在json里只传回调函数名 用eval去转换 不知是否可以

var callBack = function(){
    console.log("这是本地的回调函数");
}

var jsonTmp = {
    "callback":"callBack",
    "str":"strrrrrr"
}

var callFun = eval(jsonTmp.callback);

//调用
callFun();//打印   “这是本地的回调函数”

clipboard.png

JSON 格式支持数据类型:Number, String, Boolean, Array, Object, (Value, Whitespace, null)。JSON 不支持 Function 类型,虽然 javascript 中 Function Object 继承自 Object,也不代表他们能直接转化。至少,据我所知,函数的函数体是不能转化为其它数据类型的。

或许,就只能先转化为字符串,再用new Function()创建为函数。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题