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.

questionAnswers(2)

yourAnswerToTheQuestion