|
Herramientas para desarrolladores :
Cursos, manuales y guías de referencia :
Cursos :
Curso de JavaScript :
Capítulo 4: Funciones y objetos
- Definición de una función
- Funciones recursivas
- Creación de objetos
- Arrays asociativos
1. Definición de una función
function nombre_funcion(argumentos) {
bloque de comandos
}
El nombre de la función es sensible a mayúsculas y minúsculas. Puede incluir el
caracter "_" y empezar con una letra.
Ejemplo:
function ImprimeNombre(nombre) {
document.write("<HR>Tu nombre es <B><I>")
document.write(nombre)
document.write("</B></I><HR>")
}
La variable nombre sólo existe dentro de la función y lo mismo pasa
para cualquier variable declarada dentro de la función.
Las funciones pueden devolver un valor. Para ello:
function cubo(numero) {
var cubo = numero * numero * numero
return cubo
}
También podría haber sido
return numero * numero * numero
La función eval() evalúa un string devolviendo un valor
numérico. Por ejemplo, eval("10*10") devolverá el
valor 100.
Ejemplo:
<HTML>
<HEAD><TITLE>Preguntador</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
//DEFINICION DE LA FUNCION HazPregunta()
function HazPregunta(pregunta) {
//VARIABLES LOCALES
var solucion = eval(pregunta)
var salida = "Que da " + pregunta + "?"
var correcto='<IMG SRC="correcto.gif">'
var incorrecto='<IMG SRC="incorrecto.gif">'
//REALIZA LA PREGUNTA
var respuesta = prompt(salida,"0")
//COMPRUEBA EL RESULTADO
return (respuesta == solucion) ? correcto : incorrecto
}
//-->
</SCRIPT></HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
//EJECTUA LA FUNCION HazPregunta
var resultado = HazPregunta("10 + 10")
document.write(resultado)
//-->
</SCRIPT>
</BODY></HTML>
2. Funciones recursivas
Son las que se llaman a sí mismas. Un ejemplo típico es el de la función que calcula
el factorial de un número:
function factorial(numero) {
if (numero > 1) {
return numero * factorial(numero - 1)
} else {
return numero
}
}
Esta función se basa en que el factorial de un número x es igual x multiplicado por el
factorial de x - 1:
x! = x * (x - 1)!
Veamos una modificación del ejemplo anterior en la que la función HazPregunta es
recursiva:
<HTML>
<HEAD><TITLE>Preguntador</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
//DEFINICION DE LA FUNCION HazPregunta()
function HazPregunta(pregunta) {
//VARIABLES LOCALES
var solucion = eval(pregunta)
var salida = "Que da " + pregunta + "?"
var correcto='<IMG SRC="correcto.gif">'
var incorrecto='<IMG SRC="incorrecto.gif">'
//REALIZA LA PREGUNTA
var respuesta = prompt(salida,"0")
//COMPRUEBA EL RESULTADO
return (respuesta == solucion) ? correcto : HazPregunta(pregunta)
}
//-->
</SCRIPT></HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
//EJECTUA LA FUNCION HazPregunta
var resultado = HazPregunta("10 + 10")
document.write(resultado)
//-->
</SCRIPT>
</BODY></HTML>
Esta función puede crear problemas de memoria si el usuario nunca da la respuesta
correcta. Una posible forma de evitar esto consiste en introducir un contador del número
respuestas dadas por el usuario y compararlo con el número de oportunidades que tiene
para responder a la pregunta.
Para más información sobre las funciones recursivas y sus ventajas e inconvenientes, véase
nuestro capítulo de Funciones recursivas,
en la sección de JavaScript avanzado.
3. Creación de objetos
Para crear objetos, primero es necesario definir su tipo (o clase):
function empleado(nombre, edad, puesto) {
this.nombre = nombre
this.edad = edad
this.puesto = puesto
}
En JavaScript, la partícula this se refiere al objeto en el que se
utiliza. Una vez definida la clase, podemos crear variables (instanciar objetos) de esa
clase de la siguiente manera:
empleado_1 = new empleado("Pedro", 26,
"Programador")
Pueden añadirse propiedades a los objetos aunque estas no haya sido declaradas en la
definición de la clase. Por ejemplo:
empleado_1.jefe = "Luis"
Estas propiedades nuevas sólo afectaran a ese objeto y no al resto.
Los objetos pueden anidarse de forma que un objeto sea un a propiedad de otro objeto.
Por ejemplo:
function oficina(ciudad, pais) {
this.ciudad = ciudad
this.pais = pais
}
oficinaPedro = new oficina("Madrid","España")
empleado_1 = new empleado("Pedro", 26, "Programador", oficinaPedro)
En el ejemplo anterior, hay que definir la clase empleado de esta
forma:
function empleado(nombre, edad, puesto, oficina)
this.nombre = nombre
this.edad = edad
this.puesto = puesto
this.oficina = oficina
}
Dentro de la definición de la clase o tipo del objeto, pueden incluirse funciones que
accedan a sus propiedades. Estas funciones reciben el nombre de métodos. Un método se
define de la siguiente manera:
function mostrarPerfil() {
document.write("Nombre: " + this.nombre +
"<BR>")
document.write("Edad: " + this.edad + "<BR>")
document.write("Puesto: " + this.puesto +
"<BR>")
}
function empleado(nombre, edad, puesto) {
this.nombre = nombre
this.edad = edad
this.puesto = puesto
this.mostrarPerfil = mostrarPerfil
}
Así pueden mostrarse las propiedades del objeto empleado invocando el
método asociado:
empleado_1.mostrarPerfil
Ejemplo final:
<HTML><HEAD><TITLE>Empleados</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
//DEFINE EL METODO muostrarPerfil
function mostrarPerfil() {
document.write("<H1>Perfil del empleado " + this.nombre
+ "</H1><HR><PRE>")
document.writeln("Edad: " + this.edad)
document.writeln("Puesto: " + this.puesto)
document.write("</PRE>")
}
//DEFINE EL OBJECTO EMPLEADO
function empleado() {
this.nonmbre = prompt("Introduzca el nombre del empleado: ",
"Nombre")
this.edad = prompt("Introduzca la edad de " + this.nombre,
"00")
this.mostrarPerfil = mostrarPerfil
}
nuevoEmpleado = new empleado()
//-->
</SCRIPT>
</HEAD><BODY><SCRIPT LANGUAGE="JavaScript">
<!--
nuevoEmpleado.mostrarPerfil()
//-->
</SCRIPT>
</BODY></HTML>
4. Arrays asociativos
En JavaScript las propiedades de un objeto y los arrays están relacionados de
la siguiente manera:
empleado_1[0] = "Pedro"
empleado_1[1] = 26
empleado_1[2] = "Programador"
Y también se produce la siguiente equivalencia:
empleado_2["nombre"] equivale a empleado_2[0]
empleado_2["edad"] equivale a empleado_2[1]
Vamos a ver un ejemplo para la creación de un menú de usuario:
<HTML><HEAD><TITLE>Menu de
usuario</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
//DEFINE METODO PARA VER LA INFORMACION
function verInfo() {
document.write("<H1>Perfil del empleado: " +
this.nombre + "</H1><HR><PRE>")
document.writeln("Numero de empleado: " + this.numero)
document.writeln("Edad: " + this.edad)
document.writeln("Puesto: " + this.puesto)
document.write("</PRE>")
}
//DEFINE METODO PARA OBTENER LA INFORMACION
function obtenerInfo() {
var menu = "1. Salir/n2. Nombre/n3. Edad/n4. Puesto"
var eleccion = prompt(menu, "0")
if (eleccion != null) {
if ((eleccion < 0) || (eleccion > 4)) {
alert ("Eleccion incorrecta.")
this.obtenerInfo()
} else {
if (eleccion != "0") {
this[eleccion - 1] =
prompt("Introduzca informacion","")
this.obtenerInfo()
}
}
}
//DEFINE OBJETO
function empleado() {
this.nombre = ""
this.edad = 0
this.puesto = 0
this.verInfo = verInfo
this.obtenerInfo = obtenerInfo
}
empleadoNuevo = new empleado()
//-->
</SCRIPT></HEAD>
<BODY><SCRIPT LANGUAGE="JavaScript">
<!--
empleadoNuevo.obtenerInfo()
empleadoNuevo.verInfo()
//-->
</SCRIPT>
</BODY></HTML>
|