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 にはプライベート フィールドの概念がないため、ビューを含む外部からアクセスできますが、サービスが.. . クラスに対してプライベートであるため、ビューを含むクラス自体の外で使用しないでください。ところで、テンプレートを JavaScript コードにコンパイルするために Angular が間もなく提供するオフライン コンパイラは、ビューがプライベート フィールドを使用する場合、ビューのコンパイルを拒否すると思います。

一般に、オブジェクト指向では、private がフィールドのデフォルトであるべきです: クラスの実装をリファクタリングし、そのクラスを使用する外部コードを壊すことなく内部を変更できるように、可能な限り少数のフィールドを公開する必要があります。パブリック API で。

于 2016-08-29T11:18:57.300 に答える