为什么JSON.parse的第二个参数叫做“reviver”?
问题描述:
从MDN documentation:为什么JSON.parse的第二个参数叫做“reviver”?
reviver
(可选)如果一个函数,规定最初是如何通过分析产生的值返回之前转化。
它的名字令我奇怪。也许我在这里错过了一个隐喻  -  为什么这会被称为“复兴”一个对象?这种变压器功能有没有历史被称为“reviver”?谷歌搜索显示JSON.parse
基本上是唯一使用此术语的地方。
答
parse
函数用于从已经序列化为字符串的数据创建对象。默认情况下,它所能做的就是将数据重构为具有一堆属性的普通对象。
有时候,你可能会想“把这些值起死回生”(即重振他们)与方法,行为,等等,甚至有一个特定类型的对象成熟的对象,而不是只JSON.parse()
默认生成的价值无生命的容器。
我会说这就是为什么它被称为reviver
。
答
这个想法是,本机Javascript对象,如Number(42)
,是你的“活”对象。当你将这些序列化成JSON表示形式时,它们会“干涸”,或“虚弱”,或者任何你想称之为的东西。为了让你的新鲜的Javascript对象回来,你需要从简单的文本表示中“复活”它们。
function Foo(bar) {
this.bar = bar;
}
Foo.prototype.baz = function() {
alert(this.bar);
};
var f = Foo(42);
f.baz();
f = JSON.parse(JSON.stringify(f));
f.baz(); // Nope
为了获得具有baz
方法的原始对象回来,你需要做的不仅仅是parse
多一点:
如果你使用更复杂的对象,这变得更加明显。这是“复兴”的一部分。
也许是因为它的函数用于从字符串中'恢复'JSON?仍然比'parameter'或'asdlkasflks'命名更好... – Justinas
关闭选民:我寻求这个问题的答案是**不是基于意见的**。如果有人可以提供官方邮件列表的参考资料,或者是谁帮助指定了这个参数的名字,或者是其他任何可以客观地解决此事的报价。 – Lynn