A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze below:

Object.freeze() - JavaScript | MDN

Object.freeze()

Baseline Widely available

El método Object.freeze() congela un objeto, es decir: impide que se le agreguen nuevas propiedades; impide que se puedan eliminar las propiedades ya existentes; impide que dichas propiedades, o su capacidad de enumeración, configuración, o escritura, puedan ser modificadas; impide también que se pueda modificar su prototipo. El método devuelve el objeto recibido.

Pruébalo
const obj = {
  prop: 42,
};

Object.freeze(obj);

obj.prop = 33;
// Throws an error in strict mode

console.log(obj.prop);
// Expected output: 42
Sintaxis Parámetros
obj

El objeto a congelar.

Valor devuelto

El mismo objeto

Descripción

Nada puede ser agregado o removido de las propiedades establecidas de un objeto congelado. Cualquier intento de hacerlo fallará, ya sea de manera silenciosa o arrojando una excepción TypeError (más comunmente, pero no exclusivamente, en strict mode).

Los valores no pueden ser cambiados por propiedades de datos. Propiedades de acceso (getters y setters) funcionan igual (y aún dan la ilusión de que estas cambiando el valor). Note que los valores que son objetos aún pueden ser modificados, a menos que esten congelados tambien.

La función retorna el mismo objeto pasado en ella, no crea una copia congelada

Ejemplos Congelando Objetos
var obj = {
  prop: function () {},
  foo: "bar",
};

// Nuevas propiedades pueden ser agregadas,
// propiedades existentes pueden cambiar o removerse
obj.foo = "baz";
obj.lumpy = "woof";
delete obj.prop;

// Ambos, el objeto pasado como argumento tanto como el que se regresa
// serán congelados
// Es innecesario salvar el objeto que es regresado en orden de congelar
// el original.
var o = Object.freeze(obj);

assert(Object.isFrozen(obj) === true);

// Ahora cualquier cambio fallará
obj.foo = "quux"; // No hace nada de manera silenciosa
obj.quaxxor = "the friendly duck"; // No agrega una nueva propiedad, de manera silenciosa

// ...y en modo estricto tal intento arrojará TypeErrors
function fail() {
  "use strict";
  obj.foo = "sparky"; // arroja un TypeError
  delete obj.quaxxor; // arroja un TypeError
  obj.sparky = "arf"; // arroja un TypeError
}

fail();

// Los intentos utilizando Object.defineProperty tambien arrojarán una excepción...
Object.defineProperty(obj, "ohai", { value: 17 }); // arroja un TypeError
Object.defineProperty(obj, "foo", { value: "eit" }); // arroja un TypeError

// Es imposible cambiar un prototipo
// Estos ejemplos retornan un error TypeError
Object.setPrototype(obj, { x: 20 });
obj.__proto__ = { x: 20 };

El siguiente ejemplo muestra que los valores de objetos en un objeto congelado pueden ser mutados (la congelación es superficial).

obj1 = {
  internal: {},
};

Object.freeze(obj1);
obj1.internal.a = "aValue";

obj1.internal.a; // 'aValue'

// Para hacer obj completamente inmutable, congelamos cada objeto en obj.
// Para hacerlo, usamos esta función.
function deepFreeze(obj) {
  // Recuperamos el nombre de las propiedades en obj
  var propNames = Object.getOwnPropertyNames(obj);

  // Congelamos las propiedades antes de congelar a obj
  propNames.forEach(function (name) {
    var prop = obj[name];

    // Si la propiedad es un objeto, llamaremos a deepFreezze para que congele las propiedades de ese objeto
    if (typeof prop == "object" && prop !== null && !Object.isFrozen(prop))
      deepFreeze(prop);
  });

  // congelamos a obj
  return Object.freeze(obj);
}

obj2 = {
  internal: {},
};

deepFreeze(obj2);
obj2.internal.a = "anotherValue";
obj2.internal.a; // undefined
Notas

En ES5, si el argumento pasado a este método no es un objeto (un primitivo), entonces causará un TypeError. En ES6, un argumento no-objeto será tratado como si fuera un objeto congelado cualquiera, simplemente lo regresa.

> Object.freeze(1)
TypeError: 1 is not an object // Código ES5

> Object.freeze(1)
1                             // Código ES6
Especificaciones Compatibilidad con navegadores Mira también

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4