Estoy tratando de descubrir el patrón básico para crear una biblioteca de JavaScript (clase). Quiero hacerlo de tal manera que no contamine el espacio de nombres global con un montón de basura, pero permitiendo que la clase tenga variables de instancia y métodos públicos que modifiquen esas variables de instancia.JavaScript library pattern
Considere el siguiente ejemplo de juguete. Quiero hacer una clase Foo
. Debe contener un miembro de instancia, bar
, que es un número. Debe haber un constructor para Foo
que toma un número e inicializa su instancia bar
con ese número. Debería haber un método de instancia al que pueda llamar en un objeto Foo
para modificar bar
. Tal vez el código que utiliza la biblioteca se ve así:
var foo1 = new Foo(1);
var foo2 = new Foo(2);
console.log(foo1.bar); // should print "1"
console.log(foo2.bar); // should print "2"
foo2.changeBar(42);
console.log(foo1.bar); // should print "1"
console.log(foo2.bar); // should print "42"
La resultante foo.js
sería utilizado por una aplicación web y, por tanto, incluye a través de una etiqueta de script en el código HTML.
He hecho un poco de búsqueda con Google, pero todavía tengo que encontrar un esquema único, conciso y genérico de cómo diseñar una clase de JavaScript (utilizada como biblioteca).
+1 también. El cierre tiene algunas ventajas sutiles. Puede definir funciones "privadas" dentro del cierre a las que pueden llamar sus funciones de prototipo y miembros. – selbie
@selbie ¿cómo se definiría una función privada así, y cómo se llamaría? –
He editado la respuesta de Evan anterior para incluir un método privado. La función "privateMethod" no puede invocarse excepto por otras funciones dentro del cierre. – selbie