有没有一种方法可以在对象自己的toJSON
转换它之前让我的替代者调用 ,这样我就可以使用原始对象而不是它的JSON友好形式, 而无需 * 覆盖对象或其原型上的toJSON
,预处理对象,或编写我自己的JSON.stringify
版本?
例如:假设我希望序列化Date
示例,而不是它们的正常序列化(即toISOString
)。(这个问题不是特定于Date
,这只是一个例子。)问题是,我的replacer没有看到Date
对象,它看到的是一个字符串(见下面的片段),因为Date.prototype.toJSON
在我的replacer之前被调用。
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条答案
按热度按时间mqxuamgl1#
如果我理解你正确的话,这应该是有用的,我很确定
this
始终是JSON.stringify
当前正在迭代的对象:3qpi33ja2#
来自MDN:
在其中找到密钥的对象作为替换器的
this
参数提供。所以你可以这样做: