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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM