• Object.freeze


    Object.freeze() 方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象。

    const obj = {
      prop: 42
    };
    
    Object.freeze(obj);
    
    obj.prop = 33;
    // Throws an error in strict mode
    
    console.log(obj.prop);
    // expected output: 42

    同样可以冻结数组

    let a = [0];
    Object.freeze(a); // 现在数组不能被修改了.
    
    a[0]=1; // fails silently
    a.push(2); // fails silently

    冻结对象只是进行了“浅冻结”

    obj1 = {
      internal: {}
    };
    
    Object.freeze(obj1);
    obj1.internal.a = 'aValue';
    
    obj1.internal.a // 'aValue'

    实现深冻结需要使用递归进行操作

    function deepFreeze(obj) {
    
      // 取回定义在obj上的属性名
      var propNames = Object.getOwnPropertyNames(obj);
    
      // 在冻结自身之前冻结属性
      propNames.forEach(function(name) {
        var prop = obj[name];
    
        // 如果prop是个对象,冻结它
        if (typeof prop == 'object' && prop !== null)
          deepFreeze(prop);
      });
    
      // 冻结自身(no-op if already frozen)
      return Object.freeze(obj);
    }
    
    obj2 = {
      internal: {}
    };
    
    deepFreeze(obj2);
    obj2.internal.a = 'anotherValue';
    obj2.internal.a; // undefined

     Object.isFrozen()方法判断一个对象是否被冻结。

  • 相关阅读:
    nginx访问控制
    nginx的请求限制
    nginx目录及配置语法
    安装Nginx
    Docker Service启动时挂载docker命令
    禁止flyme自动下载rom
    docker.service 修改指南
    debian 10.x (buster) 离线安装docker及卸载
    按照容器名称清除docker容器产生的日志文件内容
    debian修改系统语言为英文
  • 原文地址:https://www.cnblogs.com/wyongz/p/11535739.html
Copyright © 2020-2023  润新知