Aufrufen einer Funktion im AngularJS-Dienst vom selben Dienst aus?

Ich habe einen AngularJS-Dienst wie folgt definiert

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

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

und ich möchte die erste funktion sowohl von außerhalb des dienstes aufrufen (das funktioniert einwandfrei durchmyService.publicFunction(xxx)) und von einer anderen Funktion im gleichen Dienst, d.h.anotherPublicFunction. Weder einer vonthis.publicFunction(param) odermyService.publicFunction(param) wird nicht innerhalb der zweiten Funktion arbeiten, und ich kann das verstehen.

BEARBEITEN:
Eigentlich wurde das ganze Problem durch etwas verursacht, das Sie mit meinem Beispiel allein nicht reproduzieren können. Ich habe die zweite Funktion als Rückrufparameter an eine andere Funktion in einem separaten Controller übergeben, und wenn sie aufgerufen wird, den Verweis aufthis funktioniert nicht

Z.B.

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

scheitert innenanotherPublicFunction dathis kann nicht gelöst werden.

Ich habe einen Plunker geschrieben, um das Problem zu zeigen: http://plnkr.co/edit/rrRs9xnZTNInDVdapiqF?p=info

(Ich werde die Frage trotzdem hier lassen, falls es jemand anderem hilft.)

Ich weiß, dass ich das Problem umgehen kann, indem ich einen Verweis auf den Dienst oder die erste Funktion wie diese verwende

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

oder dieses

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

aber beide scheinen schmutzige Hacks zu sein.

Gibt es in diesem Fall eine gute Möglichkeit, die erste Funktion von der zweiten aufzurufen? Oder mache ich überhaupt etwas völlig Falsches, um einen solchen Service zu haben?

Ich habe diese Fragen mit guten Antworten gefunden:

Angularjs teilen Funktionen innerhalb des DienstesAngularJs rufen eine interne Servicefunktion von sich aus auf

Aber sie unterscheiden sich von meinem Problem, da einer von ihnen eine separate interne Funktion hat, die aufgerufen werden sollte, und der andere eine Fabrik anstelle eines Dienstes benutzte.

BEARBEITEN:

Nachdem ich das gepostet hatte, wurde mir sofort klar, dass ich das auch tun könnte:

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

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

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

Das scheint nicht ganz so schlimm zu sein wie die anderen Optionen ... Gibt es bessere Ansätze?

Antworten auf die Frage(11)

Ihre Antwort auf die Frage