Wywoływanie funkcji w usłudze AngularJS z tej samej usługi?

Mam usługę AngularJS zdefiniowaną w następujący sposób

angular.module('myService').service('myService', function() {
  this.publicFunction(param) {
    ...
  };

  this.anotherPublicFunction(param) {
    // how to call publicFunction(param)?
    ...
  };
});    

i chciałbym wywołać pierwszą funkcję zarówno spoza usługi (która działa dobrze przezmyService.publicFunction(xxx)) i z innej funkcji w tej samej usłudze, tj.anotherPublicFunction. Ani jednego zthis.publicFunction(param) lubmyService.publicFunction(param) nie będzie działać z drugiej funkcji i mogę to zrozumieć.

EDYTOWAĆ:
W rzeczywistości cały problem został spowodowany przez coś, czego nie można odtworzyć za pomocą mojego przykładu. Przekazałem drugą funkcję jako parametr wywołania zwrotnego innej funkcji w oddzielnym kontrolerze, a gdy zostanie wywołana, odwołanie dothis nie działa.

Na przykład.

anotherService.someCall('a', 123, myService.anotherPublicFunction);

zawodzi w środkuanotherPublicFunction bothis nie można rozwiązać.

Napisałem Plunkera, aby pokazać problem: http://plnkr.co/edit/rrRs9xnZTNInDVdapiqF?p=info

(Nadal zostanę tutaj w przypadku, gdy pomoże to komuś innemu.)

Wiem, że mogłem obejść ten problem, używając odwołania do usługi lub pierwszej takiej funkcji

var ms = this;
this.anotherPublicFunction(param) {
  ms.publicFunction(param);
  ...
};

albo to

var pf = this.publicFunction;
this.anotherPublicFunction(param) {
  pf(param);
  ...
};

ale oba wydają się brudne.

Czy w tym przypadku istnieje dobry sposób na wywołanie pierwszej funkcji z drugiej? A może robię coś zupełnie złego, żeby mieć taką usługę?

Znalazłem te pytania z dobrymi odpowiedziami:

Angularjs udostępniają funkcje wewnątrz usługiAngularJs wywołują wewnętrzną funkcję usługi od siebie

różnią się jednak od mojego problemu, ponieważ jeden z nich ma osobną, wewnętrzną funkcję, która miała zostać wywołana, a druga używała fabryki zamiast usługi.

EDYTOWAĆ:

Po opublikowaniu tego natychmiast zdałem sobie sprawę, że mogę to zrobić:

var actualWork = function(param) {
  ...
}

this.publicFunction(param) {
  actualWork(param);
};

this.anotherPublicFunction(param) {
  actualWork(param);
  ...
};

co nie wydaje się tak złe, jak inne opcje do tej pory ... Czy są lepsze podejścia?

questionAnswers(11)

yourAnswerToTheQuestion