Angular2:为什么使用私有访问说明符来实例化构造函数中的提供程序

Raj*_*jni 4 angular2-injection angular

为什么仅使用私有访问说明符来实例化构造函数中的提供程序?是否有任何特定原因仅使用私有访问说明符?

私人注射

constructor(private service: InjectedService)
Run Code Online (Sandbox Code Playgroud)

公众注射

constructor(service: InjectedService)
Run Code Online (Sandbox Code Playgroud)

Aru*_*osh 7

使用私人行为是一种速记,而不是:

constructor(service: InjectedService) {
   this.service = service
}
Run Code Online (Sandbox Code Playgroud)

您可以:

constructor(private service: InjectedService) {}
Run Code Online (Sandbox Code Playgroud)


JB *_*zet 6

不同之处在于private,该字段是私有的,即无法从外部TypeScript代码访问.

由于TypeScript被编译为JavaScript,并且JavaScript没有私有字段的概念,它仍然可以从外部访问,包括视图,但是将其设为私有仍然是一个好主意,因为它记录了服务是...的事实.私有的类,因此不应该在类本身之外使用,包括视图.顺便说一句,我认为Angular即将提供的用于将模板编译为JavaScript代码的离线编译器如果使用私有字段将拒绝编译视图.

通常,在OO中,private应该是字段的默认值:您希望尽可能少地显示字段,以便能够重构类的实现并更改其内部,而不会使用该类破坏外部代码,并且仅依赖于在公共API上.