2016-07-15 55 views
2

MDN documentation为什么JSON.parse的第二个参数叫做“reviver”?

  • reviver(可选)

    如果一个函数,规定最初是如何通过分析产生的值返回之前转化。

它的名字令我奇怪。也许我在这里错过了一个隐喻  -  为什么这会被称为“复兴”一个对象?这种变压器功能有没有历史被称为“reviver”?谷歌搜索显示JSON.parse基本上是唯一使用此术语的地方。

+1

也许是因为它的函数用于从字符串中'恢复'JSON?仍然比'parameter'或'asdlkasflks'命名更好... – Justinas

+0

关闭选民:我寻求这个问题的答案是**不是基于意见的**。如果有人可以提供官方邮件列表的参考资料,或者是谁帮助指定了这个参数的名字,或者是其他任何可以客观地解决此事的报价。 – Lynn

回答

1

parse函数用于从已经序列化为字符串的数据创建对象。默认情况下,它所能做的就是将数据重构为具有一堆属性的普通对象。

有时候,你可能会想“把这些值起死回生”(即重振他们)与方法,行为,等等,甚至有一个特定类型的对象成熟的对象,而不是只JSON.parse()默认生成的价值无生命的容器。

我会说这就是为什么它被称为reviver

1

这个想法是,本机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多一点:

如果你使用更复杂的对象,这变得更加明显。这是“复兴”的一部分。

+0

我大致考虑过这种解释,它对我最有意义!我会等待某种官方引文的推出,但你的例子有助于巩固我的预感:) – Lynn

+1

其他语言有类似的类比。请参阅Java世界中的“水合物”:http://stackoverflow.com/questions/6991135/what-does-it-mean-to-hydrate-an-object – deceze

相关问题