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
比如我有这样的代码
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