Статические методы и Службы Angular 2 в JavaScript ES6
при кодировании приложения с Angular 2 и несколькими службами расчета я столкнулся со следующими вопросами:
- когда я использую static в угловой службе, предоставляемой на уровне приложения? - Что за бред?
- как статический метод отражается на производительности? Допустим, несколько сотен объектов одновременно вызывают один и тот же статический метод. Этот метод создается несколько раз?
это привязка класса, который предоставляет мне несколько методов расчета и создается экземпляр на уровне приложения:
@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, когда я не хочу вводить службу и получать экземпляр только для использования методов форматирования/утилиты контекста. Версии приложений для них не кажутся неразумно для меня.