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?