在使用Angular 2和多种计算服务编写应用程序时,我遇到了以下问题:
我何时在应用程序级别提供的Angular服务中使用static?那是胡说八道吗?
静态方法如何反映性能?让我们说几个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)与实例方法不同,类的静态方法属于类本身(在其上是可见的)(不是它的实例).它们不依赖于类的实例成员,通常会从参数中获取输入,对其执行操作,并返回一些结果.他们独立行事.
当然,它们在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