moment.js如何知道它的对象何时被序列化?

时间:2013-02-20 22:46:22

标签: javascript date datetime momentjs

来自moment.js docs

  。

矩()的toJSON();将对象序列化为JSON时,如果有   Moment对象,它将表示为ISO8601字符串。

JSON.stringify({
    postDate : moment()
}); // {"postDate":"2013-02-04T22:44:30.652Z"}

我不明白当前物体如何检测其上运行的功能。如何在序列化时返回不同的值,何时只是存储在对象中,还是以字符串形式返回?

1 个答案:

答案 0 :(得分:24)

使用stringify时,对象可以定义它的表示方式,如本文档所示:

来自https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify

toJSON行为

  

如果要进行字符串化的对象具有名为toJSON的属性   value是一个函数,然后toJSON方法自定义JSON字符串化   行为:而不是被序列化的对象,由...返回的值   调用时的toJSON方法将被序列化。

例如:

var x = {
  foo: 'foo',
  toJSON: function () {
    return 'bar';
  }
};
var json = JSON.stringify({x: x});
//json will be the string '{"x":"bar"}'.

moment.js的文档(见https://raw.github.com/timrwood/moment/2.0.0/moment.js)表明这确实支持,这里是确切的代码

toJSON : function () {
 return moment.utc(this).format('YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
}

因此,它是如何在字符串化时表示如何表示自己的。