在*对象的toJSON之前调用replacer*?

T.J*_*der 7 javascript json stringify

有没有办法对象自己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;
}
Run Code Online (Sandbox Code Playgroud)
<!-- 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>
Run Code Online (Sandbox Code Playgroud)

有没有办法让替换者首先被调用?我不想覆盖Date.prototype.toJSON,预处理对象,或写我自己的JSON.stringify,但我没有看到另一种方式.

t.n*_*ese 10

如果我理解你是正确的,这应该做的伎俩,我很确定this总是对象JSON.stringify正在迭代:

var json = JSON.stringify(obj, function(key, value) {
  if (key === "d") {
    snippet.log(getType(this[key]));
  }
  return value;
});
Run Code Online (Sandbox Code Playgroud)