簡體   English   中英

為什么JSON.parse的第二個參數稱為“reviver”?

[英]Why is the second parameter to JSON.parse called “reviver”?

MDN文檔

  • reviver (可選)

    如果函數在返回之前規定了解析最初生成的值的轉換方式。

它的名字讓我感到奇怪。 也許我在這里錯過了一個比喻 - 為什么這會被稱為“復活”一個對象? 這樣的變壓器功能有沒有歷史被稱為“復活者”? 谷歌搜索reviver +javascript顯示JSON.parse基本上是唯一使用該術語的地方。

我們的想法是,本機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它。 那是“復興”的一部分。

parse函數用於從已序列化為字符串的數據創建對象。 默認情況下,它所能做的就是將數據重構為具有一堆屬性的普通對象。

有時,您可能希望“將這些價值恢復生機”(即恢復它們)成為具有方法,行為等的完全成熟的對象,甚至是具有特定類型的對象,而不僅僅是那些沒有生命的價值觀的容器。 JSON.parse()默認生成。

我會說這就是為什么它被稱為reviver

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM