JavaScript ES6中的静态方法和Angular 2服务

时间:2017-01-25 20:29:30

标签: javascript angular typescript angular2-services

在使用Angular 2和多种计算服务编写应用程序时,我遇到了以下问题:

  1. 我何时在应用程序级别提供的Angular服务中使用static?那是胡说八道吗?
  2. 静态方法如何反映性能?让我们说几个hundret对象同时调用相同的静态方法。这个方法是不止一次实例化的?
  3. 这是该类的快照,它为我提供了多种计算方法,并在应用程序级别实例化:

    @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 个答案:

答案 0 :(得分:23)

1)与实例方法不同,类的静态方法属于类本身(在其上可见)不是它的实例)。它们不依赖于类的实例成员,通常会从参数中获取输入,对其执行操作,并返回一些结果。他们独立行动。

当然,它们在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)静态方法对性能没有影响。正如我们上面已经确定的那样,它们不依赖于类的任何实例,并且调用这些方法绝不会实例化该类。

有关详情,请参阅:http://www.typescriptlang.org/docs/handbook/classes.html

答案 1 :(得分:2)

静态方法在Angular应用程序中表示为全局变量(我认为?),因此我认为它们只会在每次实例化时被实例化。因此,我认为它不会对性能产生很大影响(相对于需要它的每个组件的类实例化。)

当我不想注入服务并获取实例以利用与上下文无关的格式化/实用程序方法时,我使用静态。这些应用程序范围的版本对我来说似乎不合理。