Chamando uma função no serviço AngularJS do mesmo serviço?

Eu tenho um serviço AngularJS definido da seguinte maneira

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

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

e eu gostaria de chamar a primeira função tanto de fora do serviço (que funciona bemmyService.publicFunction(xxx)) e de outra função no mesmo serviço, ou seja,anotherPublicFunction. Nenhum dos doisthis.publicFunction(param) oumyService.publicFunction(param) não funcionará de dentro da segunda função, e eu posso entender isso.

EDITAR:
Na verdade, todo o problema foi causado por algo que você não pode reproduzir com o meu exemplo sozinho. Eu passei a segunda função como um parâmetro de retorno de chamada para outra função em um controlador separado, e quando é chamado, a referência athis não funciona.

Por exemplo.

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

falha dentroanotherPublicFunction Porquethis não pode ser resolvido.

Eu escrevi um Plunker para mostrar o problema: http://plnkr.co/edit/rrRs9xnZTNInDVdapiqF?p=info

(Eu ainda deixarei a questão aqui, caso isso ajude alguém.)

Eu sei que eu poderia contornar o problema usando uma referência para o serviço ou a primeira função como esta

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

ou isto

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

mas ambos parecem ser hacks sujos.

Existe uma boa maneira de chamar a primeira função da segunda neste caso? Ou estou fazendo algo totalmente errado em primeiro lugar para ter um serviço como este?

Eu encontrei estas perguntas com boas respostas:

Angularjs compartilham funções dentro do serviçoAngularJs chamam uma função de serviço interno do próprio

mas eles diferem do meu problema, uma vez que um deles tem uma função interna separada que deveria ser chamada, e o outro estava usando uma fábrica em vez de um serviço.

EDITAR:

Depois de postar isso, percebi imediatamente que também poderia fazer isso:

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

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

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

o que não parece tão ruim quanto as outras opções até agora ... Existem abordagens melhores?

questionAnswers(11)

yourAnswerToTheQuestion