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

Angular getter构造是否可以在没有关联属性的情况下存在?,angular,typescript,oop,getter-setter,getter,Angular,Typescript,Oop,Getter Setter,Getter,例如,我有这样的代码 get isChart(): Observable<boolean> { return this.isTemperatureChart.pipe( withLatestFrom(this.isHypertensionChart), map(([isTemperatureChart, isHypertensionChart]) => isTemperatureChart || isHypertensionChart)

例如,我有这样的代码

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

很长一段时间以来,对于我来说,很明显,若我有复杂的二进制逻辑,并且不需要任何来自外部的属性,那个么我应该使用过程。为了代码清晰,我一直在尝试使用getter。但现在我想,关于这个结构的一个性质,并没有找到正确的答案。可以吗,使用getter只是为了获取,而不将其与某些类属性关联?或者它不是根据OOP和getter/setter的标准-仅用于封装类属性吗?

您的第二个示例返回原语值是绝对正确的,但您的第一个示例将导致问题,因为它将在每次查询该属性时创建一个新的可观察的
(如果您在模板中使用的是
async
管道,那么它将是一个订阅)。对于angular,这将是该组件的每个更改检测周期,以及您在组件内部查询它的每一次

在这种情况下,您真的不应该使用getter。如果您想让使用者防止覆盖可观察对象,而只是读取它,您应该设置
readonly
access修饰符。这会将您的示例更改为:

readonly isChart$: Observable<boolean> = this.isTemperatureChart.pipe(
  withLatestFrom(this.isHypertensionChart),
  map(([isTemperature, isHypertension]) => isTemperature || isHypertension)
);
readonly isChart$:Observable=this.isTemperatureChart.pipe(
从最晚开始(此.isHypertensionChart),
地图([isTemperature,isHypertension])=>isTemperature | | isHypertension)
);

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

我不确定您要问的到底是什么,但像这样使用getter是完全可以的。@MikeS.我问得对)使用getter(与oop的概念相反吗?非常感谢,idk it)只是为了完成这个问题,正如您所想,使用getter封装原始逻辑、“emmit”属性以获得更好的代码,这样可以吗?@cyberguycyberguy确实可以,并且被广泛使用。但是有一个旁注需要说明,如果您的typescript目标是es5,那么getter将被重写为大量代码,以支持较旧的浏览器。所以,如果应用程序大小是一个非常重要的优先级,那么您应该只使用函数,这些函数被传输到更少的代码中
readonly isChart$: Observable<boolean> = this.isTemperatureChart.pipe(
  withLatestFrom(this.isHypertensionChart),
  map(([isTemperature, isHypertension]) => isTemperature || isHypertension)
);