zoukankan      html  css  js  c++  java
  • js冻结对象

    定义一个常量,如果这个常量不是对象,那么这个常量是不可以改变的。

    例如:

    const  PI = 3.14
    PI = 3  // 报错

    但是如果这个常量是个对象,那么,这个常量的属性还是可以被修改和删除的,也可以往这个对象里添加新属性。

    例如:

    const obj = {
        a:'a',
        b:'b'
        }
    
    obj.a = c 
    console.log(obj.a)   // c

    那么应该怎样才能方式一个常量的对象被修改了呢?此时需要一个方法

    Object.freeze(obj)

    被冻结的对象,不能添加属性,不能修改属性,不能删除属性,例如:

    var obj = {
       a:'a',
       b:'b'  
    }
    
    Object.freeze(obj)
    
    obj.a = 'c'
    console.log(obj.a)  // 仍然是 a,不是 c

    如何判断一个对象是否被冻结?那需要另外一个方法:

    Object.isFrozen(obj)

    例如:

    var obj = {
       a:'a',
       b:'b'  
    }
    
    Object.freeze(obj)
    
    Object.isFrozen(obj)  // true

    如何冻结深层对象?

    深层对象是这样的:

    const deepObj = {
       test:{
           a:'a',
           b:'b'        
        }  
    }

    js没有冻结深层对象的方法,但是可以自己写一个。

      function deepFreeze(obj){
                var propertyNames = Object.getOwnPropertyNames(obj)
                propertyNames.forEach(ele=>{
                    if(typeof obj[ele] === 'object' && obj[ele]!==null){
                        deepFreeze(obj[ele])
                    }
                })
                return Object.freeze(obj)
             }
    
    
    deepFreeze(deepObj)
    Object.isFrzon(deepObj)  // true
  • 相关阅读:
    前端提示“页面正在载入”的功能实现
    JSON那些事
    如何让nodejs同步操作
    nodejs的一些局限
    《javascript高级程序设计》读书笔记——作用域
    svn教程
    从雷军谈小米中的一些思考
    云Vps安全设置
    不同服务器数据库之间的数据操作
    C#语言的Excel文件导入导出
  • 原文地址:https://www.cnblogs.com/luguankun/p/12435337.html
Copyright © 2011-2022 走看看