duduromeroa.com

Javascript

Programación para web con JS (6/8): clases, getters y setters...





GETTERS y SETTERS

Para Svekis y Putten[5] las claves get y set son propiedades especiales –que se ven como una función()–. Son usados para 'entrar' a una clase y 'enganchar' datos desde ella. Así mismo, es correcto bloquear el acceso a esos datos desde lo que sea que no fuere su propia clase mediante el signo '#'.

/* Se crea un objeto con propiedades y valores */
let humano = {
ojos: 2, cerebro: 1,
/* Va coma luego de la última propiedad */

/* Agregamos una función para captar 
los valores de las propiedades */
get crearHumano() {
return `Humano con ${this.ojos} ojos y ${this.cerebro} cerebro`;
  },
/* Va coma luego de la última función */

/* Sin embargo, para reasignar nuevos valores 
a las propiedades de 'humano', necesitaremos la clave 'set' */
set crearHumano(nuevoValor) {
    this.ojos = nuevoValor.split(" ");
  }
};

console.log(humano.crearHumano);
// -> Este nuevo humano tiene 2 ojos y 1 cerebro

// Valor actualizado
humano.crearHumano = "4";

console.log(humano.crearHumano);
// -> Este nuevo humano tiene 4 ojos y 1 cerebro

Así mismo, es correcto bloquear el acceso a esos datos desde lo que sea que no fuere su propia clase mediante el signo '#'.

En el ejemplo de abajo, GET captura o toma el valor de la propiedad protegida. Mientras que SET toma el valor de la propiedad protegida y posibilita actualizar ese valor fuera de la clase. Para Svekis y Putten[5] aún con propiedades innaccesibles fuera de una clase, la clave 'get' permite capturar esos valores, mientras que 'set' los actualiza:

 class bolon{
/* Datos bloqueados: innacesibles 
desde fuera de la clase */
#ingredienteA
#ingredienteB;

constructor(ingredienteA, ingredienteB){
this.#ingredienteA = ingredienteA;
this.#ingredienteB = ingredienteB
}

// GET-SET --> ingredienteA
get ingredienteA(){return "rico " + this.#ingredienteA;}
// Doble identificador
set ingredienteA(ingredienteA)
{this.#ingredienteA = ingredienteA;}

// GET-SET --> ingredienteB
get ingredienteB(){return this.#ingredienteB;}
// Doble identificador
set ingredienteB(ingredienteB)
{this.#ingredienteB = ingredienteB;}
} // Fin clase

let boloncito = new bolon("verde", "chicharron");
console.log("Mi boloncito es de " + 
boloncito.ingredienteA + " con " + 
boloncito.ingredienteB );
// --> Mi boloncito es de rico verde con chicharron

Actualizar un valor mediante set es posible desde fuera de la clase. En el ejemplo de abajo se actualizó el valor 'chicharron' a 'QUESITO!'. Eso debe hacerse DESPUÉS -y no antes– de crear el objeto 'boloncito':


Subir al inicio Seguir a la parte séptima



BIBLIOGRAFÍA:
    3ra edición. 2018. Marijn Haverbeke. No starch press.
    Mozilla Foundation.
    David Flanagan (2020). Editorial O'Reilly.
    Ved Antani, Stoyan Stefanov (2017). Packt Publishing.
    Editorial Packt.
    Information and Computation. Elsevier.
    ACM SIGCSE BulletinVolume 19Issue 1Feb. 1987 pp 98–102https://doi.org/10.1145/31726.31742.