为什么只使用私有访问说明符来实例化构造函数中的提供者?是否有任何特定原因仅使用私有访问说明符?
私人注射
constructor(private service: InjectedService)
公共注射
constructor(service: InjectedService)
为什么只使用私有访问说明符来实例化构造函数中的提供者?是否有任何特定原因仅使用私有访问说明符?
私人注射
constructor(private service: InjectedService)
公共注射
constructor(service: InjectedService)
使用 private 是一种速记,而不是:
constructor(service: InjectedService) {
this.service = service
}
你可以:
constructor(private service: InjectedService) {}
不同之处在于private
该字段是私有的,即无法从外部 TypeScript 代码访问。
由于 TypeScript 被编译为 JavaScript,并且 JavaScript 没有私有字段的概念,它仍然可以从外部访问,包括视图,但是将其设为私有仍然是一个好主意,因为它记录了服务是...... .私有的类,因此不应该在类本身之外使用,包括视图。顺便说一句,我认为 Angular 即将提供的将模板编译为 JavaScript 代码的离线编译器将拒绝编译使用私有字段的视图。
一般来说,在 OO 中,private 应该是字段的默认值:您希望公开尽可能少的字段,以便能够重构类的实现并更改其内部而不破坏使用该类的外部代码,并且只依赖在公共 API 上。
1) 私人注入
构造函数(私人服务:InjectedService)
service 是一个参数,但也成为您的对象的属性,因此您将能够通过 this.service 在您的类的其他方法中访问它
2)公共注入
构造函数(服务:InjectedService)
service 只是构造函数作用域中的一个参数,不再与对象关联,因此您将无法执行 this.service