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

Angular2:为什么要使用私有访问说明符来实例化构造函数中的提供者,angular,angular2-injection,Angular,Angular2 Injection,为什么只使用私有访问说明符来实例化构造函数中的提供者? 是否有任何特定的理由只使用私有访问说明符 私人注资 constructor(private service: InjectedService) constructor(service: InjectedService) 公共注射剂 constructor(private service: InjectedService) constructor(service: InjectedService) 使用私人行为作为速记,而不是: co

为什么只使用私有访问说明符来实例化构造函数中的提供者? 是否有任何特定的理由只使用私有访问说明符

私人注资

constructor(private service: InjectedService)
constructor(service: InjectedService)
公共注射剂

constructor(private service: InjectedService)
constructor(service: InjectedService)

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

constructor(service: InjectedService) {
   this.service = service
}
你可以:

constructor(private service: InjectedService) {}

区别在于
private
使字段私有,即无法从外部TypeScript代码访问

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

一般来说,在OO中,字段的默认值应该是private:您希望公开尽可能少的字段,以便能够重构类的实现并更改其内部,而不必使用该类破坏外部代码,并且只依赖公共API。

1)private injection

constructor(private service: InjectedService)
constructor(service: InjectedService)
构造函数(私有服务:InjectedService)

服务是一个参数,但也成为对象的属性,因此您可以通过类的其他方法中的this.service访问它

2) 公共注射剂

constructor(private service: InjectedService)
constructor(service: InjectedService)
构造函数(服务:InjectedService)


服务只是构造函数作用域中的一个参数,将不再与对象关联,因此您将无法执行此操作。服务对我来说意义不大。你能用示例代码说明你的问题吗?我猜你所说的“实例化提供者”是指“注入服务”。我想你应该问问自己:为什么它们应该公开?是的,我指的是注射服务。例如:构造函数(私有用户ser:UserService){};在这种情况下,我看不出公共和私人的区别。那么我的疑问是为什么更喜欢私人访问specifier@JBNizet答案应标记为正确。我的总结:如果没有理由将其设置为
public
,请将其标记为
private