2. Objetos
Un objeto es una colección de nombre/valor.
Es un tipo de datos compuesto.
Difiere de los tipos de datos primitivos: String,
number, boolean.
Junto con Arrays constituyen los 2 tipos de datos
más importantes en JavaScript.
3. Objetos
Tipo de dato compuesto que almacena múltiples
valores en una única unidad y que nos permite
accederla por nombre para extraer o
almacenar datos.
4. Crear Objetos
• Literalmente: lista de pares ‘nombre’:’valor’
separados por comas y delimitados por llaves {}
– var empty = {};
– var coordenada = { x:0, y:0};
– var circulo = { x:punto.x, y:punto.y, radio:2 };
– var profesor = {
‘nombre’ : ‘Daniel’,
‘cursos’: arreglo_cursos,
‘email’: ‘dgrippo@gmail.com’
};
5. Crear Objetos
• Operador new
El operador new crea tipo de objetos especiales.
var fecha = new Date();
var arreglo = new Array();
var regexp = new RegExp(“javascript”,”i”);
var rectan = new Rectangulo(20,40);
6. Propiedades
• Para acceder a los pares de ‘nombre’:’valor’
de los Objetos se utiliza el operador punto .
objeto_nombre.valor_nombre;
objeto_nombre = propiedad
7. Propiedades
var libro = {};
libro.titulo = ‘El Quijote de La Mancha’;
libro.autor = ‘Miguel de Cervantes Saavedra’;
libro.paginas = 1096;
libro.capitulos = new Array();
libro.capitulos[0] = new Object();
libro.capitulos[0].titulo = ‘Que trata de la….’;
libro.capitulos[0].paginas = 5;
8. Propiedades
• var para declarar el objeto
• Propiedades solo con el nombre
• new propiedades objetos
• var no se usa en las propiedades
• Se pueden agregar nuevas propiedades en todo
momento.
• Se pueden eliminar propiedades en todo momento.
9. Propiedades
• Enumerar/listar propiedades de un objeto:
function DisplayPropertiesName(obj) {
for (var name in obj) {
console.log(‘obj.’ + name);
}
}
10. Propiedades
<!DOCTYPE html>
<html>
<head>
<meta charset= “utf-8”</meta>
<title>Objetos</title>
<script language="javascript">
var libro = {};
libro.titulo = 'El Quijote de La Mancha';
libro.autor = 'Miguel de Cervantes Saavedra';
libro.paginas = 1096;
libro.capitulos = new Array();
libro.capitulos[0] = new Object();
libro.capitulos[0].titulo = 'Que trata de la...';
libro.capitulos[0].paginas = 5;
function DisplayPropertiesName() {
for (var name in libro) {
console.log('obj.' + name);
}
}
</script>
</head>
<body onload="DisplayPropertiesName()">
</body>
</html>
11. Propiedades
• Chequear si existe una propiedad:
if (“x” in objeto) …
objeto.x !== undefined
Nota: “x” literal x
13. Objetos: Arreglos Asociativos
En lenguales fuertemente tipados (C/C++, Java),
los objetos tienen un número fijo de
propiedades cuyos nombres son definidos
cuando se programa.
profesor.nombre;
profesor.curso;
Nombre y curso deben estar definidas en el
programa literalmente.
14. Objetos: Arreglos Asociativos
• Para acceder a las propiedades de un objeto
se utiliza el operador punto:
– objeto.propiedad // identificador
• O puedo utilizarse el operador [] como en
arreglos:
– objeto[‘propiedad’] // string
Ambas expresiones son equivalentes.
15. Objetos: Arreglos Asociativos
• El operador “.” accede a una propiedad del
objeto cuyo nombre es un identificador.
• Los identificadores son literales tipeados en
un programa JS.
• No son variables de un tipo de datos en JS.
• Los literales deben conocerse de antemano.
16. Objetos: Arreglos Asociativos
• El operador “[]” accede a una propiedad de un
arreglo que esta expresada como una cadena.
• La cadena es una variable tipo string. Un tipo
de datos en JS.
• Puede manipularse perfectamente en un
programa JS.
• Puede cambiarse dinámicamente en la
ejecución del programa JS:
17. Objetos: Arreglos Asociativos
JavaScript no es fuertemente tipado y por lo
tanto no se requiere que las propiedades de
un objeto estén definidas de antemano, uno
puede crearlas/definirlas en runtime, o sea,
mientras se ejecuta el script.
Cómo? Utilizando la notación de Objetos
como Arreglos Asociativos
18. Objetos: Arreglos Asociativos
Conclusión:
puedo definir dinámicamente propiedades para
los objetos si utilizo el operador “[]”.
19. Objetos: Arreglos Asociativos
var nombre_accion = leer_nombre_accion();
var cant_accion = leer_cant_accion();
mis_acciones[nombre_accion] = cant_accion;
var valores = 0;
for (accion in mis_acciones) {
valores += valor_accion(accion) * mis_acciones[accion];
}
20. Class: Object
• Los objetos JS heredan de la Clase Object.
• RegExp y Date definen sus propios métodos y
propiedades.
• Universalmente, todos soportan las
propiedades y métodos de Object.
21. Constructor
• Propiedad
• Todo objeto JS tiene un constructor.
• Función que crea al objeto.
var d = new Date();
d.constructor == Date; // true
22. Constructor
• La propiedad constructor de un objeto ayuda
a determinar el tipo de objeto.
if (( typeof o == “object”) && ( o.constructor == Date))
if (( typeof o == “object”) && ( o instaceof Date))
23. Clases, Constructores, Prototipos
• Definiendo Clases propias:
function Rectangulo(w, h) {
this.ancho = w;
this.alto = h;
}
rect1 = new Rectangulo(10,20); // rect1 = {width:10, height:20}
- rect1 es un objeto de clase Rectangulo.
- function Rectangulo es el constructor .
- Las funciones constructor no devuelven un valor.