Chame o substituto * antes * de toJSON do objeto?
Existe uma maneira de chamar meu substitutoantes próprio objetotoJSON
transforma, para que eu possa trabalhar com o objeto original em vez de sua forma compatível com JSON,sem substituindo otoJSON
no objeto ou em seu protótipo, pré-processando o objeto ou escrevendo minha própria versão doJSON.stringify
?
Por exemplo: Suponha que eu queira serializarDate
instâncias de maneira diferente da serialização normal (qual étoISOString
) (Esta pergunta énão específico aDate
, este é apenas um exemplo.) O problema é que meu substituto não vê oDate
objeto, ele vê uma string (veja o trecho abaixo) porqueDate.prototype.toJSON
é chamadoantes meu substituto.
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>
Existe uma maneira de chamar o substituto primeiro? Eu não quero substituirDate.prototype.toJSON
, pré-processe o objeto ou escreva meu próprioJSON.stringify
, mas não estou vendo outra maneira.