lunes, 12 de julio de 2010

Cómo trabajar OO en JavaScript

A continuación un ejemplo que permite ver cómo trabajar con "clases" en JavaScript (JS). Podrá observar que el constructor de la "clase", y lo coloco entre comillas porque más bien parece una estructura de datos potenciada, está definido por la firma de la función. Los atributos o funciones definidos con las palabras reservadas this o var son de acceso público o privado respectivamente. NOTA: Los parámetros de las funciones setters llevan el guión bajo "_", porque no podría utilizarse la variable this ya que tendrían que haberse declarado los atributos como públicos (utilizando this) y no privados (utilizando var).

Ahora el código:

<html>
<head>
<title>Ejemplo clases JavaScript</title>
<script language="javascript">
const ROL_INVITADO = 'invitado';
const ROL_ADMIN = 'admin';

function Usuario(nombre, clave, rol) {
var nombre = nombre;
var clave = clave;
var rol = rol;

//setters
this.setNombre = function(_nombre) { nombre = _nombre; };
this.setClave = function(_clave) { clave = _clave; };
this.setRol = function(_rol) { rol = _rol; };

//getters
this.getNombre = function() { return nombre; };
this.getClave = function() { return clave; };
this.getRol = function() { return rol; };

//funciones
this.toString = function() {
retorno = 'nombre: ' + this.getNombre() + ', ';
retorno += 'clave: ' + this.getClave() + ', ';
retorno += 'rol: ' + this.getRol();

return retorno;

};

}
</script>
</head>
<body>
<script language="javascript">
var usuario = new Usuario('rodolfo', '123456', ROL_ADMIN);
document.writeln(usuario);
document.writeln('<br/>');

usuario.setRol(ROL_INVITADO);
document.writeln(usuario);
</script>
</body>
</html>

1 comentario:

  1. "this" depende del contexto, por eso es que no se puede usar dentro de los lambdas de "setNombre" y "getNombre", en ese caso "this" es dentro del contexto del lambda, es decir, "this" dentro de ese lambda es distinto de "this" fuera

    ResponderEliminar