Manually listing the properties here after they've already been manually assigned in the constructor seems error-prone.  Would it make sense to not override toJSON at all and instead depend on the default behavior of JSON.stringify?  If not, a comment describing why not would be helpful.