2017-01-25 8 views
11

Во время кодирования приложения с угловыми 2 и нескольких службами расчета я столкнулся следующими вопросами:Статические методы и угловые 2 Услуг в JavaScript ES6

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

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

+0

частного статики? : o – DDRamone

ответ

15

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

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

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

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

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

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

+0

Если это так, это удивительно, я всегда думал, что вам нужно вводить услуги, чтобы использовать их: o – Chrillewoodz

+1

«Ввод» для процесса DI, на который я верю, поэтому, если вам нужен экземпляр службы, должны быть введены. Однако, если это статический класс (т. Е. Нет экземпляра!), То нет необходимости в экземпляре, поэтому нет необходимости в DI и, следовательно, нет необходимости в @Injectable :) – chrispy

+0

Но как вы создаете статический класс? Его пример - это не статический класс? – Chrillewoodz