Función como clase vs función factoría en Javascript

Normalmente suelo crear funciones que utilizo como clases en Javascript, por ejemplo una «clase» contador:

function Contador(init){
    this.num = (init!== undefined)?init:1;
    this.incrementa = function(){ this.num++; }
}

// y la usaríamos de la siguiente forma
var obj = new Contador(5);
obj.incrementa();
console.log(obj.num);

Como se ve, se puede acceder directamente a las propiedades del objeto y no siempre querremos esto. Para eso podemos usar una función factoría que básicamente funciona igual pero nos impide acceder a las propiedades (para acceder a estas tendremos que usar algún método).

function contador(init){
    var _num = (init!== undefined)?init:1;
    return {
        incrementa:function(){ _num++; },
        valor:function(){ return _num; }
    }
}

// y la usaríamos de la siguiente forma
var obj = contador(10);
obj.incrementa();
console.log(obj.valor());
Dejar un comentario?

0 Comentarios.

Deje un comentario


NOTA - Puede usar estosHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.