getter 构造是否可以在没有关联属性的情况下存在?

问题描述 投票:0回答:1

例如,我有这样的代码

get isChart(): Observable<boolean> {
  return this.isTemperatureChart.pipe(
    withLatestFrom(this.isHypertensionChart),
    map(([isTemperatureChart, isHypertensionChart]) => isTemperatureChart || 
         isHypertensionChart)
  );
}

或为简化

get isChart(): boolean {
  return this.isTemperatureChart && this.isSomeOtherPropertyTrue
}

很久以来,对我来说,如果我有复杂的二进制逻辑,并且不需要任何外部属性,我应该使用过程。而且为了代码的清晰,我一直尝试使用getters。但现在我想,关于这种结构的性质,我找不到正确的答案。是否可以只用getter来GETTING,而不与某个类属性相关联?还是根据OOP和getterssetters的规范--只用于封装类属性?

angular typescript oop getter-setter getter
1个回答
1
投票

你的第二个例子返回一个基元值是绝对正确的,但是你的第一个例子会引起问题,因为它将创建一个新的 Observable 每次查询该属性时(如果您使用的是 async 管道)。) 对于angular来说,这将是该组件的每一个变化检测周期,也是你每次在组件ts中查询它的时候。

在这种情况下,你真的不应该使用getters。如果你想让消费者防止覆盖observable,而只是读取它,你应该把它设置为 readonly 访问修改器。这样你的例子就会改成。

readonly isChart$: Observable<boolean> = this.isTemperatureChart.pipe(
  withLatestFrom(this.isHypertensionChart),
  map(([isTemperature, isHypertension]) => isTemperature || isHypertension)
);

我不知道你的代码,但从你的变量命名来看,感觉你最好用的是: combineLatest 而不是 withLatestFrom

© www.soinside.com 2019 - 2024. All rights reserved.