在编写一个包含Angular 2和多个计算服务的应用程序时,我遇到了以下问题:

  1. 什么时候在应用程序级别提供的Angular 服务中使用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 {
    ...
  }
}

谢谢你的帮助.

推荐答案

  1. instance个方法不同,一个类的Static个方法属于(在)类本身(not an instance of it).它们不依赖于类的实例成员,通常会从参数中获取输入,对其执行操作,并返回一些结果.他们独立行动.

它们在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
    }
}
  1. Static种方法对性能没有影响.如上所述,它们不依赖于该类的任何实例,调用这些方法绝不会实例化该类.

更多信息,请参见:http://www.typescriptlang.org/docs/handbook/classes.html

Typescript相关问答推荐

为什么typescript不能推断类的方法返回类型为泛型''

迁移到Reaction路由V6时,获取模块Reaction-Router-Dom';没有导出的成员RouteComponentProps错误

有没有办法解决相互影响的路由之间的合并?

使用`renderToPipeableStream`时如何正确恢复服务器端Apollo缓存?

打字类型保护递归判断

是否可以基于对象的S属性值[]约束对象的其他属性值用于类型化的对象数组?

如何在typescript中为this关键字设置上下文

缩小对象具有某一类型的任意字段的范围

自动通用回调

在打字脚本中对可迭代对象进行可变压缩

在Reaction中折叠手风琴

如何提取具有索引签名的类型中定义的键

JSX.Element';不可分配给类型';ReactNode';React功能HOC

无法使用prisma中的事务更新记录

带有过滤键的 Typescript 映射类型

通过函数将对象文字类型映射到另一种类型的方法或解决方法

使用 Nestjs DTO 中的另一个字段管理可选和必填字段

从接口与类型字段的联合中提取,其中类型字段是枚举联合

为什么 TypeScript 认为变量可以是未定义的,而实际上它不能?

无法通过 Prisma 使用 Next.js 13 api 路由从数据库中删除条目