Soy relativamente nuevo en JS y tengo problemas para emular los principios de OOP.Clases de JavaScript y ámbito variable
Supongo que tengo dos preguntas. La primera pregunta es sobre las muchas formas de declarar variables.
Decir que tengo una clase:
function clazz(a)
{
this.b = 2;
var c = 3;
this.prototype.d = 4; // or clazz.prototype.d = 4?
}
var myClazz = new clazz(1);
Estoy en lo correcto en las siguientes evaluaciones:
a es una variable privada que es instancia específica (es decir, diferentes instancias de clazz tendrán variables únicas e independientes 'un'). Se puede acceder desde clazz como: 'a'.
b es una variable pública que es específica de la instancia. Se puede acceder desde dentro de clazz como 'this.b' y desde clazz externo como 'myClazz.b'.
c es una variable privada que es estática, o clase específica (es decir, distintas instancias de clazz compartirán la misma variable 'c'). Se puede acceder desde cualquier instancia de clazz como 'c' y los cambios en la instancia de clazz se reflejan en todas las instancias de clazz.
d es una variable pública que es estática/clase específica. Se puede acceder desde cualquier lugar a través de 'clazz.prototype.d' o 'myClazz.prototype.d'.
El problema general que tengo con mi comprensión del esquema de variables es que no hay forma de declarar una variable privada que NO sea estática (es decir, una versión única para cada instancia de la clase).
La segunda pregunta es con respecto a los diferentes tipos de declaraciones de clase.
He estado usando:
var MySingleton = new function() {...};
para crear conjuntos unitarios. ¿Es esto correcto? También estoy seguro sobre el efecto de la "nueva" palabra clave en esta situación, así como anexar() la función de los apoyos hasta el final de la declaración como tal:
var MySingleton = new function() {...}();
He estado usando este patrón de declare una clase y luego crea instancias de esa clase:
function myClass() {...};
var classA = new myClass();
var classB = new myClass();
¿Es este el método correcto?
+1. Una respuesta muy completa e informativa. –
Gracias por la respuesta informativa. Un seguimiento: ¿Cuáles son las diferencias tangibles entre el enfoque de módulo a la declaración singleton y el estilo al que se hace referencia en la publicación original? – Cmc
** @ Lior: ** gracias! ** Cmc: ** Escribí un poco sobre la sintaxis que publicaste ... – CMS