【发布时间】:2017-11-08 12:03:32
【问题描述】:
最近遇到以下难题:
标准
Typescript documentation 建议使用具有下划线前缀的私有成员创建对象定义,允许 getter/setter 使用所述成员的原始“名称”,提供间接公共访问(他们应该这样做)。
Angular documentation 另有建议,但未提供在其对象定义示例中为私有变量使用 getter 和 setter 的示例。
问题
我一直在最大程度上遵循 Typescript 编码标准。以下面的类为例:
public class Foo{
private _bar:string;
constructor(){ this._bar='Baz'; }
get bar():string{return this._bar}
}
使用以下代码将其序列化为 JSON:
console.log(JSON.stringify(new Foo()));
...将产生:
{
'_bar': 'Baz'
}
问题
- 考虑到这些是“指南”和简单的建议,Angular 处理对象定义的方式是什么,允许直接序列化?
- 在我的示例中,私有访问修饰符肯定不允许直接访问它的值吗?我在这里使用 private 访问修饰符的理解中遗漏了什么?
我已经阅读了很多关于处理序列化的不同方式的其他文章和 StackOverflow 帖子,想要阻止“如何”,而是就所提到的行为询问“为什么”。
任何反馈将不胜感激! :)
亲切的问候
【问题讨论】:
-
“建议使用具有下划线前缀的私有成员创建对象定义”我还没有找到任何相关信息。为什么你认为这是建议的?我认为你的意思是他们使用
_前缀来避免与 getter/setter 的命名勾结。这不同于 Angular 建议不要将_用于私人成员。 -
嘿@GünterZöchbauer! :) 是的,这正是我发现的,由于命名共谋,我无法实现任何访问器/突变器。我理解那里的区别,但找不到任何建议在此实例中实现访问器和修饰符的 Angular 文档
标签: angular typescript serialization