如果我不在foo
、loadBar
和text
之前添加private,我相信它们是默认情况下公开。
export class RandomComponent {
@Input() foo: string;
@Output() loadBar = new EventEmitter();
text: string;
}
当它们在组件中是public
时是否有任何用例?
出于封装/安全原因,我是否应该始终为所有这些添加 private
,如下所示?
export class RandomComponent {
@Input() private foo: string;
@Output() private loadBar = new EventEmitter();
private text: string;
}
谢谢
最佳答案
回答这个问题有很多话要说,这些是我首先想到的:
首先,请记住 private
只是一个编译时构造 - 它不能在运行时强制执行(有关相关讨论,请参见 here 和 here):请忽略任何private
的概念以任何方式用于安全目的。这根本不是它的意义所在。
它是关于封装的,当你的组件上有一个你想封装在其中的字段或方法时,明确表示不应该从其他任何地方访问它,那么你绝对应该将其设置为 private
:这就是 private
的用途:它表明您的意图,即您放置的任何东西都不应被触及来自课外。
public
也是如此:它也是一个仅在编译时构造的结构,因此类成员默认为 public
的事实虽然为真,但确实具有运行时的零意义。但是,当您有一个成员,您明确打算将其作为类 API 的一部分公开给外界时,您绝对应该将其设置为 public
以表示此意图:这就是 public
是为了。
这一般都适用于 Typescript。具体来说,在 Angular 中,在组件类上拥有公共(public)成员绝对是有效的用例:例如,在实现 container/component 时(又名 smart/dumb )模式,“愚蠢”的 child 通过构造函数注入(inject)注入(inject)“聪明”的 parent ,传达您关于 parent 的哪些成员应该和不应该被 child 接触的意图非常重要:否则,不要当你看到那些在他们 parent 的酒柜里鬼混的蠢 child 时,你会感到惊讶。
那么,我对你问题的回答:
should I always add private for all of them like below?
是强调的不。您不应该总是添加private
,因为这样做会破坏关键字的目的,因为如果您将它放在任何地方,它就不再表示任何意图:你还不如不要把它放在任何地方。
关于typescript - Angular 组件中的 "private"和 "public",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37506343/