拿这个对象:
x = { "key1": "xxx", "key2": function(){return this.key1} }
如果我这样做:
y = JSON.parse( JSON.stringify(x) );
然后y将返回{ "key1": "xxx" }。通过stringify传递函数有什么能做的吗?使用“ ye goode olde eval()”可以创建具有附加功能的对象,但是打包该对象又是什么呢?
{ "key1": "xxx" }
您不能打包函数,因为任何序列化程序都看不到函数关闭的数据。甚至Mozilla uneval也无法正确打包闭包。
uneval
最好的选择是使用复活器和替换器。
https://yuilibrary.com/yui/docs/json/json-freeze- thaw.html
传递给JSON.parse的reviver函数将应用于从最深的密钥到最高级别的原始解析对象中的所有key:value对。在我们的例子中,这意味着名称和发现的属性将通过齐整器传递,然后包含那些键的对象将通过。