Czy istnieje sposób, aby mój zamiennik o nazwie przed obiekt własnego toJSON
przekształca go tak, że mogę pracować z oryginalnego obiektu, a nie jego JSON w obsłudze formie, bez przesłanianie toJSON
na obiekcie lub jego prototyp , wstępne przetwarzanie obiektu lub pisanie własnej wersji JSON.stringify
?Zadzwoń do zamiennika * przed * obiektem do JSON?
Na przykład: Załóżmy, że chcę serializować instancje Date
w inny sposób niż ich normalna serializacja (which is toISOString
). (To pytanie jest nie specyficzne Date
, to tylko przykład). Problem polega na tym, mój zamiennik nie widzi obiekt Date
, widzi napis (patrz poniżej urywek), ponieważ Date.prototype.toJSON
nazywa przed mój zamiennika .
var obj = {
d: new Date()
};
snippet.log(getType(obj.d)); // "[object Date]"
var json = JSON.stringify(obj, function(key, value) {
if (key === "d") {
snippet.log(getType(value)); // "string" <== Want to see a Date here
}
return value;
});
function getType(value) {
var to = typeof value;
if (to === "object") {
to = Object.prototype.toString.call(value);
}
return to;
}
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
Czy istnieje sposób, aby uzyskać zamiennik o nazwie pierwszy? Nie chcę przesłonić obiektu Date.prototype.toJSON
, wstępnie przetworzyć obiektu ani napisać własnego JSON.stringify
, ale nie widzę innego sposobu.
Piękny. Nawet [działa w wyjątkowym przypadku] (http://jsbin.com/zeciqiwawo/1), w którym szumujesz fragment dokumentu ('JSON.stringify (new Date())'), a nie cały dokument, dziękuję [kroki 9-11] (http://www.ecma-international.org/ecma-262/5.1/#sec-15.12.3). –
naprawdę fajny .. –