Gravar Object.freeze em js

const foo = {
    
    };

// 为 foo 添加一个属性,可以成功
foo.prop = 123;
foo.prop // 123

// 将 foo 指向另一个对象,就会报错
foo = {
    
    }; // TypeError: "foo" is read-only

No código acima, a constante foo armazena um endereço, que aponta para um objeto. Apenas este endereço é imutável, ou seja, foo não pode ser apontado para outro endereço, mas o próprio objeto é mutável, então novos atributos ainda podem ser adicionados a ele.

Abaixo está outro exemplo.

const a = [];
a.push('Hello'); // 可执行
a.length = 0;    // 可执行
a = ['Dave'];    // 报错

No código acima, a constante a é uma matriz e a própria matriz é gravável, mas se outra matriz for atribuída a a, um erro será relatado.

Se você realmente deseja congelar o objeto, deve usar o método Object.freeze.

const foo = Object.freeze({
    
    });

// 常规模式时,下面一行不起作用;
// 严格模式时,该行会报错
foo.prop = 123;

No código acima, a constante foo aponta para um objeto congelado, portanto, adicionar novas propriedades não funciona e um erro será relatado no modo estrito.

Além de congelar o próprio objeto, as propriedades do objeto também devem ser congeladas. Abaixo está uma função que congela completamente um objeto.

var constantize = (obj) => {
    
    
  Object.freeze(obj);
  Object.keys(obj).forEach( (key, i) => {
    
    
    if ( typeof obj[key] === 'object' ) {
    
    
      constantize( obj[key] );
    }
  });
};

Acho que você gosta

Origin blog.csdn.net/qq_30627241/article/details/131223089
Recomendado
Clasificación