Patrón de módulo JavaScript: miembros protegidos?

Hola! ¡Esta es mi primera pregunta!

Estoy experimentando con el patrón de módulo promovido por Doug Crockford y otros. En general, estoy muy contento con eso hasta ahora, pero estoy un poco inseguro sobre la mejor manera de manejar un cierto patrón de herencia.

Lo he reducido a un caso básico con gatos y mamíferos, aunque mi intención real es hacer objetos para un juego basado en fichas en lienzo.

Pero aquí está mi caso básico de 'animales' usando una alerta de navegador:

var ZOO = ZOO || {};
//
ZOO.mammal = function () {
   "use strict";
   var voice = "squeak.mp3", // default mammal sound
      utter = function () {
         window.alert(this.voice);
      };
//
   // public interface
   return {
      utter: utter,
      voice: voice
   };
};
//
ZOO.cat = function () {
   "use strict";
   // hook up ancestor
   var thisCat = ZOO.mammal();
   thisCat.voice = "miaw.mp3";
   return thisCat;
};
//
var felix = ZOO.cat();
felix.utter();

Lo que me molesta de este enfoque es que he tenido que hacervoice una propiedad pública para que cat pueda modificarla.

o que realmente quiero es algo como visibilidad 'protegida' (de Java, ActionScript, etc.), de modo quecat puede modificarvoice sin que nadie tenga acceso afelix poder modificarlo.

¿Hay alguna solución?