Patrón javascript para OOP

Se refiere a usar un estilo de programación orientada a objetos en javascript.

Las funciones anónimas crean una closure dentro de ellas permitiendo que todo el scope quede oculto al exterior y accesible al interior y con ello ya tendríamos solucionado el acceso “private”.

Pero ¿Cuál sería el mejor método para hacer hacer el acceso explícitamente público ?. Pues usando el siguiente patrón llamado Yahoo Module Pattern que básicamente pone dentro del return todo lo que queramos hacer “public”.

Tomando el ejemplo de Robert Nyman,

var person = function () {

// Acceso Privado
var name = "Robert";

// Acceso Público
return {
getName : function () {
return name;
},
setName : function (newName) {
name = newName;
}
};
}(); // esta sintáxis hace que la función se autoejecute

alert(person.name); // Undefined
alert(person.getName()); // "Robert"
person.setName("Robert Nyman");
alert(person.getName()); // "Robert Nyman"

Observamos cómo hacemos name privada y las funciones de getter y setter públicas.

Si no necesitamos que la función se autoejecute (como es habitual en Node), podemos usar una sintaxis alternativa (pero no tengo claro que equivalente) y que personalmente prefiero a la anterior; Se trata de usar this para referenciar los objetos que queramos hacer públicos.

function Prova() {
// parte privada
var nombre="pere";

function mayus(algo) {
return algo.toUpperCase();
}

// parte pública
this.getName=function() {
// accedemos a la funcion
// "privada" dentro
// del closure
return mayus(nombre);
}

this.setName=function(newName) {
nombre=newName;
}
} // creamos el objeto con new

var p=new Prova();
console.log(p.nombre); // undefined
console.log(p.mayus("Pere Vilas")); // Error: has no method
console.log(p.getName()); // devuelve PERE

Written (and syncronized with StackEdit)

Wonderful!!

This text has been written in markup and then synchronized with Blogger. This the end of the editing pain on Blogger.

A cité

A numbered list

  1. one
  2. two
  3. three

An unnumbered list

  • One
  • Two
    • Three
    • Four

this is source code

This is also source code but
marked with a tab or four spaces

If you liked it, you must visit StackEdit:

Written with StackEdit.

Navaja de Occam

Pluralitas non est ponenda sine neccesitate

Passo a ghost

A partir d'ara, totes les entrades del blog sortiran a pvilas.ghost.io
A partir de ahora, todas las entradas del blog saltrán en pvilas.ghost.io
Right now, all the new entries will appear on pvilas.ghost.io