Статические методы и Angular 2 Услуги в JavaScript ES6

При кодировании приложения с Angular 2 и несколькими службами расчета я столкнулся со следующими вопросами:

  • Когда я использую static в службе Angular, предоставляемой на уровне приложения? Это вздор?
  • Как статический метод отражает производительность? Допустим, что пара объектов 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 {
    ...
  }
}

Спасибо за помощь.

Ответ 1

1) Статические методы класса, в отличие от методов экземпляра, принадлежат (видны) самому классу (а не его экземпляру). Они не зависят от членов экземпляра класса и обычно принимают входные данные от параметров, выполняют над ним действия и возвращают некоторый результат. Они действуют независимо.

Они имеют смысл в сервисах Angular. Существуют ситуации, когда нам фактически не нужно использовать экземпляр службы, и мы не хотим создавать новую зависимость от него, нам нужен только доступ к методам, которые несет наша служба. Здесь вступают статические члены.

Пример использования статического метода, определенного в сервисе:

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) Статические методы не влияют на производительность. Как мы выяснили выше, они не зависят от какого-либо экземпляра класса, и вызов этих методов никоим образом не будет создавать экземпляр класса.

Для получения дополнительной информации, он хорошо объяснил на: http://www.typescriptlang.org/docs/handbook/classes.html

Ответ 2

Статические методы представлены как глобальные переменные (я думаю?) в приложении Angular, поэтому я думаю, что они будут создаваться только один раз. Поэтому я думаю, что это не окажет большого влияния на производительность (относительно создания экземпляра класса для каждого его компонента).

Я использую static, когда я не хочу вводить эту службу, и получить экземпляр, чтобы использовать методы агрегирования контекста и агностики. Обширные версии этих приложений для меня не кажутся необоснованными.