No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Abstracción con objetos literales y deep copy

10/19
Recursos

Aportes 8

Preguntas 2

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

Para refrescar un poco la memoria.

Resumen !

Abstracción con objetos literales y deep copy

Object.isSealed()

El método **Object.isSealed()** si el objeto está sellado.

Devuelve true si el objeto está sellado, de lo contrario devuelve false. Un objeto está sellado si no es extensible y si todas sus propiedades no se pueden configurar y por lo tanto no removibles (pero no necesariamente no modificables).

Object.isFrozen()

El método **Object.isFrozen()** determina si un objeto está congelado.

Devuelve true si el objeto está sellado, de lo contrario devuelve false. Un objeto está sellado si no es extensible y si todas sus propiedades no se pueden configurar y por lo tanto no removibles (pero no necesariamente no modificables).

Un objeto está congelado si y solo si no es extendible, todas sus propiedades son no-configurables, y todos los datos de sus propiedades no tienen capacidad de escritura.

Código Clase

/* Codigo para hacer un DeepCopy */
const studentBase = {
    name: undefined,
    email: undefined,
    age: undefined,
    approvedCourse: undefined,
    learningPaths: undefined,
    socialMedia: {
        twitter: undefined,
        instagram: undefined,
        facebook: undefined,
    }
};

const carlos = deepCopy(studentBase);
// Object.defineProperty(carlos, "name", {
//     value: "Carlitos",
//     configurable: false,
// });
Object.seal(carlos); // Es lo mismo que lo de arriba pero mas easy
carlos.name = "Carlitos";

Object.isSealed(carlos); // Nos muestra con True o False si todas las propiedades estan selladas
Object.isFrozen(carlos); // Nos muestra con True o False si todas las propiedades estan congeladas

Object.freeze()

Este método congela un objeto que sea pasado. Es decir:

  • Impide que se le agreguen nuevas propiedades
  • Impide que sean eliminas propiedades ya existentes
  • Impide que sus las propiedades internas (writable, enumerable y configurable) sean modificadas

Object.seal()

Este método sella un objeto que sea pasada. Es decir:

  • Impide que nuevas propiedades sean agregadas
  • Cambia en todas las propiedades configurable: false, con lo que impide que sean borradas
  • Las propiedades aún puede ser modificadas, ya que writable esta true

Object.isSealed()

Este método determina si un objeto se encuentra sellado. Devuelve un valor boolean. Es decir:

  • El objeto no es extendible, por lo cual no se pueden agregar más propiedades
  • Todas sus propiedades no se pueden configurar, por lo tanto no son removibles
const person = {
  name: 'Eduardo',
  lastName: 'Mendez',
}

Object.seal(person)
Object.isSealed(person) // true

Esta función no toma en cuenta que la función Object.seal() haya sido aplicada en el objeto. Nosotros podemos simular el comportamiento de Object.seal() con otras funciones:

const person = {
  name: "Eduardo",
  lastName: "Mendez",
};

Object.preventExtensions(person);
Object.defineProperty(person, "name", { configurable: false });
Object.defineProperty(person, "lastName", { configurable: false });

Object.isSealed(person) // true

Object.isFrozen()

Este método determina si un objeto se encuentra congelado. Devuelve un valor boolean. Es decir:

  • El objeto no es extendible, por lo cual no se pueden agregar más propiedades
  • Todas sus propiedades no se pueden configurar, por lo tanto no son removibles
  • Todas sus propiedades no pueden ser reescritas.
const person = {
  name: 'Eduardo',
  lastName: 'Mendez',
}

Object.freeze(person)
Object.isFrozen(person) // true

Al igual que Object.isSealed(), esta función no toma en cuenta que la función Object.freeze() haya sido aplicada en el objeto. Nosotros podemos simular el comportamiento de Object.freeze() con otras funciones:

const person = {
  name: "Eduardo",
  lastName: "Mendez",
};

Object.preventExtensions(person);
Object.defineProperty(person, "name", { configurable: false, writable: false });
Object.defineProperty(person, "lastName", {
  configurable: false,
  writable: false,
});

Object.isFrozen(person) // true

Object.preventExtensions() evita o previene que nuevas propiedades sean agregadas a un objeto.

Para los que somos mas gráficos…

Abstracción con objetos literales y deep copy

const studentBase = {
  name: undefined,
  email: undefined,
  age: undefined,
  approvedCourses: undefined,
  learningPaths: undefined,
  socialMedia: {
    facebook: undefined,
    twitter: undefined,
    instagram: undefined,
  }
};

const juan = deepCopy(studentBase);
Object.seal(juan); //* Ninguna propiedad del objeto Juan se podrá eliminar
Object.isSealed(juan); //* Pregunta si tiene todas sus propiedades protegidas
Object.isFrozen(juan); //* Pregunta si tiene todas sus propiedades protegidas y además no se pueden agregar otras

6. Abstracción y encapsulamiento sin usar prototipos ni clases

  • Object.defineProperty()

Crear una nueva propiedad y edita alguna que ya habíamos creado:

Object.defineProperty(obj, "propiedad", {
    value: valor,
    writable: true,
    enumerable: true,
    configurable: true

});
Object.defineProperty(juan,"name",{
    value: "Luis Alberto Spinetta",
    configurable:false,
})
// proteje nuestras propiedades

  • Object.seal()
    Un atajo para que las propiedades no se puedan editar

  • Object.isSealed()
    Verifica si un objeto está sellado o no

  • Object.isFrozen()
    determina si un objeto está congelado o no

Excelente clase