序列化和恢复类实例
你可以使用自定义 toJSON 方法和 reviver 函数以 JSON 格式传输你自己的类的实例。如果对象具有 toJSON 方法,则其结果将被序列化而不是对象本身。
Version < 6
function Car(color, speed) {
  this.color = color;
  this.speed = speed;
}
Car.prototype.toJSON = function() {
  return {
    $type: 'com.example.Car',
    color: this.color,
    speed: this.speed
  };
};
Car.fromJSON = function(data) {
  return new Car(data.color, data.speed);
};
Version >= 6
class Car {
  constructor(color, speed) {
    this.color = color;
    this.speed = speed;
    this.id_ = Math.random();
  }
  toJSON() {
    return {
      $type: 'com.example.Car',
      color: this.color,
      speed: this.speed
    };
  }
  static fromJSON(data) {
    return new Car(data.color, data.speed);
  }
}
var userJson = JSON.stringify({
  name: "John",
  car: new Car('red', 'fast')
});
这将生成一个包含以下内容的字符串:
{"name":"John","car":{"$type":"com.example.Car","color":"red","speed":"fast"}}
var userObject = JSON.parse(userJson, function reviver(key, value) {
  return (value && value.$type === 'com.example.Car') ? Car.fromJSON(value) : value;
});
这会产生以下对象:
{
  name: "John",
  car: Car {
    color: "red",
    speed: "fast",
    id_: 0.19349242527065402
  }
}