2016-07-15 35 views
2

Vom MDN documentation:Warum wird der zweite Parameter für JSON.parse "reviver" genannt?

  • reviver (Optional)

    Wenn eine Funktion schreibt vor, wie sich der Wert ursprünglich durch Parsen erzeugt wird umgewandelt, bevor zurückgegeben wird.

Sein Name kommt mir seltsam. Vielleicht vermisse ich hier eine Metapher - & thinsp; warum würde das "Wiederbeleben" eines Objekts genannt? Gibt es eine Geschichte zu einer solchen Transformatorfunktion, die als "reviver" bezeichnet wird? Googlen zeigt, dass JSON.parse im Grunde der einzige Ort ist, wo dieser Begriff verwendet wird.

+1

Vielleicht, weil es die Funktion ist, um JSON aus der Zeichenfolge "wiederbeleben"? Trotzdem ist es besser zu benennen als 'parameter' oder' asdlkasflks' ... – Justinas

+0

Um Wähler zu schließen: Die Antwort, die ich zu dieser Frage suche, ist ** nicht auf Meinungen basiert **. Wenn jemand eine Referenz von einer offiziellen Mailingliste oder ein Zitat von jemandem, der geholfen hat, diesen Parameter zu nennen, oder was auch immer, zur Verfügung stellt, wird das ** objektiv ** die Angelegenheit auflösen. – Lynn

Antwort

1

Die Funktion parse wird zum Erstellen eines Objekts aus Daten verwendet, die in einer Zeichenfolge serialisiert wurden. Standardmäßig können die Daten nur in einfache Objekte mit einer Reihe von Eigenschaften umgewandelt werden.

Manchmal möchten Sie vielleicht "diese Werte wieder zum Leben erwecken" (dh sie revive sie) in vollwertige Objekte mit Methoden, Verhaltensweisen usw. oder sogar Objekte, die einen bestimmten Typ haben, statt nur Die leblosen Container mit Werten, die JSON.parse() standardmäßig erzeugt.

Ich würde sagen, deshalb heißt es reviver.

1

Die Idee ist, dass native Javascript-Objekte, wie ein Number(42), Ihre "Live" -Objekte sind. Wenn Sie diese in eine JSON-Darstellung serialisieren, sind sie "ausgetrocknet" oder "verdummt" oder wie immer Sie es nennen wollen. Um Ihre neuen Live-JavaScript-Objekte zurück zu erhalten, müssen Sie sie aus ihrer einfachen Textdarstellung "wiederbeleben".

Dies wird umso deutlicher, wenn Sie komplexere Objekte verwenden:

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 

Um das ursprüngliche Objekt zurück, das eine baz Methode hat, müssen Sie als nur ein wenig mehr tun parse es. Das ist der "wiederbelebende" Teil.

+0

Ich habe grob diese Interpretation betrachtet, und das macht für mich am meisten Sinn! Ich werde auf eine Art offizielles Zitieren warten, aber Ihr Beispiel hat geholfen, meine Vorliebe zu festigen. – Lynn

+1

Andere Sprachen haben ähnliche Analogien. Siehe "Hydrat" in der Java-Welt: http://stackoverflow.com/questions/6991135/what-does-it-meanto-hydrate-an-object – deceze