Я пишу класс обслуживания, который содержит набор служебных функций.Вместо того, чтобы выставлять все функции как открытые, функции объединяются в серию открытых объектов, которые предназначены для обеспечения логического потока для доступа к ним.Вот пример:
class MyUtilService {
public exposedObject = {
get prop1() {
return this.utilFunction1;
},
get prop2() {
return this.utilFunction2;
}
};
private utilFunction1() {//...}
private utilFunction2() {//...}
}
Проблема в том, что объект this
в получателях ссылается на exposedObject
НЕ класс (как и следовало ожидать).Цель состоит в том, чтобы получить доступ к этим функциям в другом месте приложения следующим образом:
myUtilService.exposedObject.prop1() // Want this to execute utilFunction1
Другое желание заключается в том, чтобы информация о наборе из utilFunction1
поддерживалась при использовании.Ранее я использовал .bind(this)
вместо получателей, но это препятствовало передаче любой информации о наборе.То же самое происходит с Object.defineProperty
.Любые мысли о том, как я мог бы заставить это работать?
Примечания: Использование TS 2.5.x и Angular 5.x
РЕДАКТИРОВАТЬ: IЯ добавляю некоторую дополнительную информацию, так как суть проблемы не ясна в моем первоначальном посте.Основная проблема возникает, когда одна из частных функций использует другую функцию из службы.Рассмотрим этот код:
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)
, но тогда вы потеряете информацию о наборе для функции.Это загадка.Вот почему я пошел по пути вложенных геттеров, но у него есть свои проблемы с контекстом this
.