Вызвать заменитель * перед * объектом toJSON?

Есть ли способ, чтобы мой заменитель называетсядо собственный объектtoJSON преобразует его, чтобы я мог работать с исходным объектом, а не с JSON-дружественной формой,без переопределениеtoJSON на объекте или его прототипе, предварительно обработав объект или написав собственную версиюJSON.stringify?

Например: предположим, я хочу сериализоватьDate экземпляры отличаются от их обычной сериализации (которыйtoISOString). (Этот вопросне конкретных дляDateЭто всего лишь пример.) Проблема в том, что мой заменитель не видитDate объект, он видит строку (см. фрагмент ниже), потому чтоDate.prototype.toJSON называетсядо мой заменитель.

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>

Есть ли способ вызвать замену первым? Я не хочу переопределятьDate.prototype.toJSON, предварительно обработать объект или написать свойJSON.stringify, но я не вижу другого пути.

Ответы на вопрос(2)

Ваш ответ на вопрос