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

Is getter construction can exist without associated property?

比如我有这样的代码

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,而不将其与某些 class 属性 相关联?或者它不是根据 OOP 和 getters/setters 的规范 - 仅用于 class 属性 的封装?

你的第二个返回原始值的例子是绝对正确的,但是你的第一个例子会导致问题,因为它会在每次查询 属性 时创建一个新的 Observable (并且它是一个如果您在模板中使用 async 管道,请订阅)。对于 angular,这将是该组件的每个更改检测周期,以及每次在组件 ts 中查询它的时间。

在那种情况下,你真的不应该使用吸气剂。如果您希望消费者防止覆盖可观察对象,而只是读取它,您应该设置 readonly 访问修饰符。这会将您的示例更改为:

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

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