web-dev-qa-db-ja.com

静的メソッドとAngular 2 JavaScript ES6のサービス

Angular 2と複数の計算サービスを使用してアプリをコーディングする際、次の質問に直面しました。

  1. Angularアプリケーションレベルで提供されるサービスでstaticを使用するのはいつですか?それはナンセンスですか?
  2. 静的メソッドはパフォーマンスにどのように反映されますか?いくつかのhundretオブジェクトが同時に同じ静的メソッドを呼び出すとしましょう。このメソッドは複数回インスタンス化されていますか?

これはクラスのスナップであり、複数の計算方法を提供し、アプリケーションレベルでインスタンス化されます。

@Injectable()
export class FairnessService {
  constructor(){}
  private static calculateProcentValue(value: number, from: number): number {
    return (Math.abs(value) / Math.abs(from)) * 100;
  }
  public static calculateAllocationWorth(allocation: Allocation): number {
    ...
  }
}

手伝ってくれてありがとう。

19
Ore

1)Staticクラスの静的メソッドは、instanceメソッドとは異なり、クラス自体に属する(表示される)(それのインスタンスではない)。クラスのインスタンスメンバーに依存せず、通常はパラメーターから入力を受け取り、そのアクションを実行し、結果を返します。彼らは独立して行動します。

それらはAngularサービスで意味を持ちます。実際にサービスのインスタンスを使用する必要がない状況があり、それに新しい依存関係を作りたくない場合は、サービスが保持するメソッドへのアクセスのみが必要です。ここでは、staticメンバーが入ります。

サービスで定義された静的メソッドの使用例:

import { FairnessService } from './fairness.service';

export class MyComponent {

    constructor() {
        // This is just an example of accessing the static members of a class.
        // Note we didn't inject the service, nor manually instantiate it like: let a = new A();
        let value = FairnessService.calculatePercentValue(5, 50);
        let value2 = FairnessService.calculatePercentValue(2, 80);

        console.log(value); // => 10
        console.log(value2); // => 2.5
    }
}

2)Staticメソッドはパフォーマンスに影響を与えません。上記で確認したように、これらはクラスのインスタンスに依存せず、これらのメソッドを呼び出してもクラスはインスタンス化されません。

詳細については、以下で詳しく説明されています。 http://www.typescriptlang.org/docs/handbook/classes.html

27
Seid Mehmedovic

静的メソッドは、Angularアプリケーションでグローバル変数として表されます(だと思いますか?)それを必要とする各コンポーネントのクラスのインスタンス化に関連して)

コンテキストに依存しない書式設定/ユーティリティメソッドを活用するためだけにサービスを注入してインスタンスを取得したくない場合は、静的を使用します。これらのアプリケーション全体のバージョンは、私にとって不合理ではないようです。

2
chrispy