4

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

私人注射

constructor(private service: InjectedService)

公共注射

constructor(service: InjectedService)
4

3 回答 3

7

使用 private 是一种速记,而不是:

constructor(service: InjectedService) {
   this.service = service
}

你可以:

constructor(private service: InjectedService) {}
于 2016-08-29T11:10:20.570 回答
6

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

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

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

于 2016-08-29T11:18:57.300 回答
0

1) 私人注入

构造函数(私人服务:InjectedService)

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

2)公共注入

构造函数(服务:InjectedService)

service 只是构造函数作用域中的一个参数,不再与对象关联,因此您将无法执行 this.service

于 2018-04-11T11:23:58.977 回答