【发布时间】:2021-12-24 15:03:44
【问题描述】:
如果我有一个像下面这样的类和方法,我想知道是否有一种方法可以轻松地在 f1 方法上声明一个额外的属性?
export class Something {
f1(): string { ... }
}
当不在课堂环境中时,我可以这样做:
function f1(): string {
// Simple example.
if ( ... ) {
f1.found = true;
} else {
f1.found = false;
}
}
namespace f1 {
export let found = false;
}
由于命名空间与函数定义合并,因此不会出现错误。
【问题讨论】:
-
您能否提供有关该用例的更多信息?由于方法由所有实例共享,因此方法上的任何标志也将被共享。那是你要的吗?为什么需要方法本身的附加属性而不是仅使用类属性?
-
@FelixKling 是的,所以我想尝试存储额外的信息,因为我不想更改函数的返回值和类型。这将使我能够在函数上存储
found或lastKey之类的内容,以便像这样使用:s1 = new Something()s1.f1(...);if (s1.f1.found) { ... }这是因为函数总是会返回一些东西。还有例如我可以存储一个lastKey变量,然后从函数中获取。 -
“因为我不想改变函数的返回值和类型” 那你为什么要把它转换成类方法呢?我的意思是,您想要的并非不可能,但如果您无论如何都在重构您的代码,为什么不花时间正确设计 API?
-
@BlindChicken 请改用
s1.found。或s1.f1Found。或者更好的是,只需将标志放在s1.f1()的返回值上。就像 Felix 说的,不要在函数对象上放一个全局标志。