是否有一个函数或库将采用具有属性和函数的JS对象并将其字符串化为JSON但是当涉及到一个函数时,它会将其更改为属性并调用该函数以返回其值?
function object() {
this.property = 12;
this.function = function() { return "This"; }
}
所以这将串行化为:
{property: 12, function: "This"}
有什么想法吗?只是好奇是否已经有一个..如果不是,我会采取一个刺。不应该很难扩展JSON.stringify()。
答案 0 :(得分:2)
有些对象没有简单的序列化。 如果你希望序列化它们,你必须自己做一套假设。
函数(特别是带闭包的函数)和IO Streams就是一些例子。在JS函数的情况下,序列化(没有序列化整个上下文!)违反了关于执行上下文和范围链的函数的语义。此外,浏览器提供帮助以返回函数“文本”的能力取决于浏览器。
答案 1 :(得分:1)
JSON.stringify
方法提供了包含一个名为replacer
的回调参数的选项,该函数通过传递键和值来调用您的对象的每个属性,您可以检测该值是否为function
并调用它:
var obj = {
"property": 12,
"function": function() { return "This"; }
};
JSON.stringify(obj, function (key, value) {
if (typeof value == 'function') {
return value();
}
return value;
});