materials

Objetos en Javascript

Introducción

En Javascript podemos definir cualquier variable como un objeto declarándola con new (NO se recomienda) o creando un literal object (usando notación JSON). Ejemplo con new (no recomendado):

let alumno = new Object()
alumno.nombre = 'Carlos'     // se crea la propiedad 'nombre' y se le asigna un valor
alumno['apellidos'] = 'Pérez Ortiz'    // se crea la propiedad 'apellidos'
alumno.edad = 19

Creando un literal object (es la forma recomendada) el ejemplo anterior sería:

let alumno = {
    nombre: 'Carlos',
    apellidos: 'Pérez Ortiz',
    edad: 19,
};

Propiedades de un objeto

Podemos acceder a las propiedades con . (punto) o [ ]:

console.log(alumno.nombre)       // imprime 'Carlos'
console.log(alumno['nombre'])    // imprime 'Carlos'
let prop = 'nombre'
console.log(alumno[prop])        // imprime 'Carlos'

Si intentamos acceder a propiedades que no existen no se produce un error, se devuelve undefined:

console.log(alumno.ciclo)      // muestra undefined

Sin embargo se genera un error si intentamos acceder a propiedades de algo que no es un objeto:

console.log(alumno.ciclo)           // muestra undefined
console.log(alumno.ciclo.descrip)      // se genera un ERROR

Para evitar ese error antes había que comprobar que existan las propiedades previas:

console.log(alumno.ciclo && alumno.ciclo.descrip)
// si alumno.ciclo es un objeto muestra el valor de 
// alumno.ciclo.descrip y si no muestra undefined

Con ES2020 (ES11) se ha incluido el operador de encadenamiento opcional ?. para evitar tener que comprobar esto nosotros:

console.log(alumno.ciclo?.descrip)
// si alumno.ciclo es un objeto muestra el valor de 
// alumno.ciclo.descrip y si no muestra undefined

Podremos recorrer las propiedades de un objecto con for..in:

for (let prop in alumno) {
    console.log(prop + ': ' + alumno[prop])
}

Si el valor de una propiedad es el valor de una variable que se llama como la propiedad no es necesario ponerlo:

let nombre = 'Carlos'

let alumno = {
    nombre,            // es equivalente a nombre: nombre
    apellidos: 'Pérez Ortiz',
    ...

Métodos de un objeto

Una propiedad de un objeto puede ser una función:

alumno.getInfo = function() {
    return 'El alumno ' + this.nombre + ' ' + this.apellidos + ' tiene ' + this.edad + 'años'
}

También podemos ponerlo con sintaxis arrow function:

alumno.getInfo = () => 'El alumno ' + this.nombre + ' ' + this.apellidos + ' tiene ' + this.edad + 'años'

Y para llamarlo se hace como con cualquier otra propiedad:

console.log(alumno.getInfo())    // imprime 'El alumno Carlos Pérez Ortíz tiene 19 años'

EJERCICIO: Crea un objeto llamado tvSamsung con las propiedades nombre (“TV Samsung 42”), categoria (“Televisores”), unidades (4), precio (345.95) y con un método llamado importe que devuelve el valor total de las unidades (nº de unidades * precio)

Bibliografía