拿走这个元素:
x = {
"key1": "xxx",
"key2": function(){return this.key1}
}
如果我这样做:
y = JSON.parse( JSON.stringify(x) );
然后 y 将返回 { "key1": "xxx"}
。有什么办法可以通过 stringify 传递函数吗?使用“ye goode olde eval()”可以创建带有附加函数的对象,但是打包它是什么?
最佳答案
json-stringify-function是与此类似的帖子。
通过该帖子发现的片段可能对任何偶然发现此答案的人有用。它通过使用 replacer 来工作JSON.stringify 和 reviver 中的参数JSON.parse 中的参数。
更具体地说,当一个值恰好是函数类型时,.toString()
会通过 replacer
对其调用。解析时,当函数以字符串形式存在时,eval()
会通过 reviver
执行。
var JSONfn;
if (!JSONfn) {
JSONfn = {};
}
(function () {
JSONfn.stringify = function(obj) {
return JSON.stringify(obj,function(key, value){
return (typeof value === 'function' ) ? value.toString() : value;
});
}
JSONfn.parse = function(str) {
return JSON.parse(str,function(key, value){
if(typeof value != 'string') return value;
return ( value.substring(0,8) == 'function') ? eval('('+value+')') : value;
});
}
}());
关于javascript - 有没有可能让 JSON.stringify 保留函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7759200/