Estoy tratando de entender la clase de clases, visibilidad de datos y cierres (específicamente en Javascript) y estoy en la página de documentos jQuery para tipos, menciona que los cierres se usan para ocultar datos :Cierre de Javascript y visibilidad de datos
El patrón le permite crear objetos con métodos que operan con datos que no son visibles desde el exterior, la base misma de la programación orientada a objetos.
El ejemplo:
function create() {
var counter = 0;
return {
increment: function() {
counter++;
},
print: function() {
console.log(counter);
}
}
}
var c = create();
c.increment();
c.print(); // 1
Al declarar la variable contador con la palabra clave var, que ya está en el ámbito local dentro de la definición de la función/clase. Por lo que sé y puedo decir, no es accesible desde el exterior para empezar. Me estoy perdiendo algo desde una perspectiva de visibilidad de datos.
En segundo lugar, hay una ventaja para escribir la clase como la de arriba frente, como a continuación:
function create() {
var counter = 0;
this.increment = function() {
counter++;
}
this.print = function() {
console.log(counter);
}
return this;
}
var c = create();
c.increment();
c.print(); // 1
Como yo lo entiendo, estos son más o menos semánticamente lo mismo - la primera es sólo más "estilo jQuery ". Me pregunto si hay una ventaja u otro matiz que no aprecio del primer ejemplo. Si estoy en lo cierto, ambos ejemplos crean cierres en el sentido de que están accediendo a datos declarados fuera de su propio alcance.
http://docs.jquery.com/Types#Closures
Y personalmente, esta es la forma en que prefiero crear objetos, después de haber probado innumerables técnicas. Creo que esto es mucho más limpio y fácil de entender. Pero ese soy yo. :) –
Minit nit: devolver "this" es equivalente a no devolver nada explícitamente, cuando se usa el nuevo operador. Sin el nuevo operador, "este" es el contexto actual (a menudo veces global), y así terminas destrozando variables globales. – ken