我正在编写一个服务类,其中包含实用程序函数的集合。这些函数不是将所有函数公开为公共(public)函数,而是串联成一系列公共(public)对象,旨在提供访问它们的逻辑流。这是一个例子:
class MyUtilService {
public exposedObject = {
get prop1() {
return this.utilFunction1;
},
get prop2() {
return this.utilFunction2;
}
};
private utilFunction1() {//...}
private utilFunction2() {//...}
}
问题在于,getter 中的 this
对象引用的是 exposedObject
而不是类(正如预期的那样)。目标是在应用程序的其他位置访问这些函数,如下所示:
myUtilService.exposedObject.prop1() // Want this to execute utilFunction1
这里的另一个愿望是在使用时维护来自 utilFunction1
的输入信息。我之前曾使用 .bind(this)
而不是 getter,但这会阻止传递任何类型信息。 Object.defineProperty
也会发生同样的情况。关于如何让它发挥作用有什么想法吗?
注释:使用 TS 2.5.x 和 Angular 5.x
编辑: 我添加了一些额外的信息,因为问题的核心在我最初的帖子中并不清楚。当一个私有(private)函数使用服务内的另一个函数时,就会出现主要问题。考虑这段代码:
class MyUtilClass {
public exposedObject = {
prop1: this.utilFunction1
};
private utilFunction1() {
this.utilFunction2();
}
private utilFunction2() {//...}
}
// Want this to execute utilFunction1 which executes utilFunction2
someService.exposedObject.prop1()
utilFunction2 在 utilFunction1
内部使用,但当调用 myUtilClass.exposedObject.prop1()
时,this.utilFunction2
未定义,因为this
上下文来自调用者(同样,正如预期的那样)。这可以通过 prop1: this.utilFunction1.bind(this) 来克服,但随后您会丢失该函数的键入信息。这是一个难题。这就是为什么我采用嵌套 getter 的方式,但这在 this
上下文中存在其自身的问题。
最佳答案
考虑到您想要实现的目标,这应该对您有用。
class MyUtilService {
public exposedObject = {
prop1:this.prop1,
prop2:this.prop2
}
private get prop1(){
return this.utilFunction1();
}
private get prop2() {
return this.utilFunction2();
}
private utilFunction1() {}
private utilFunction2() {}
}
let utilityservice = new MyUtilService();
utilityservice.exposedObject.prop2;
关于angular - Typescript 如何从嵌套对象 Getter 返回类函数引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52322431/