Да, это по дизайну.
Как определено в ECMA, только собственные перечислимые свойства сериализованы (stringify()
определяется в терминах Object.keys()
, среди прочих ).
Атрибуты доступа к ресурсам определены на прототипах, как в TypeScript, так и в ES6.
И отвечая на ваш последний вопрос, это самый эффективный способ выполнить эту операцию.
Кроме того, только a) определяет toJSON () для каждой части объекта сериализации или b) передает функцию-заменитель / массив как второй аргумент в JSON.stringify ().
Свойства белого списка из прототипа:
JSON.stringify(instance, Object.keys(instance.constructor.prototype))