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

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

  1. когда я использую static в угловой службе, предоставляемой на уровне приложения? - Что за бред?
  2. как статический метод отражается на производительности? Допустим, несколько сотен объектов одновременно вызывают один и тот же статический метод. Этот метод создается несколько раз?

это привязка класса, который предоставляет мне несколько методов расчета и создается экземпляр на уровне приложения:

@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 {
    ...
  }
}

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

2 ответов


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

они, конечно, имеют смысл в угловых сервисах. Бывают ситуации, когда нам не нужно использовать экземпляр сервис, и мы не хотим делать новую зависимость от него, нам нужен только доступ к методам, которые несет наш сервис. Вот!--2-- > 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


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

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