El concepto básico de un Módulo Revelador es que tiene un Objectque encapsula sus datos y comportamiento:
var Module = (function(){
var privateStuff = {};
var publicStuff = {};
return publicStuff;
})();
Sin embargo, existen algunas prácticas recomendadas que debe emplear al utilizar este patrón. Aquí hay un módulo (" Modulus") con algunas propiedades por motivos de demostración, que emplea algunas de estas prácticas:
function AbstractSomeClass(id) {
this.id = id;
return this;
}
var Modulus = (new (function SomeClass() {
var thus = this;
function NameClass(name){
this.value = thus.name || name;
}
AbstractSomeClass.call(this, 998);
this.name = 'Touring';
this.name = ( new NameClass('Hofstadter') ).value;
return {
id: this.id,
name: this.name
};
})());
Observe la (new (function SomeClass(){ ... })());sintaxis. Usar newasí le permite usar la thispalabra clave dentro del cierre. Esto es útil si necesita heredar propiedades de otra clase ( AbstractSomeClass.call(this, 998);). Sin embargo, aún deberá revelar las propiedades que le gustaría tener públicas, por ejemplo:
return {
id: this.id,
name: this.name
};
También observe que asignamos thisa thus, lo que nos permite usar el Padre, thisdentro de una subclase que tiene su propio thisalcance ( this.value = thus.name || name;)
Una vez más, estas son solo algunas de las convenciones y mejores prácticas que se sugieren.