2023年10月2日 星期一

關於檢查 Object.preventExtensions() 、Object.seal() 與 Object.freeze() 的注意事項

 關於檢查 Object.preventExtensions() 、Object.seal() 與 Object.freeze() 的注意事項

前言

  Object.preventExtensions() 、Object.seal() 與 Object.freeze() 這三個相似的功能,看似個別獨立,但實際上有相關聯,在此把學習的過程做個紀錄。


內容

  JavaScript 提供 Object.isExtensible() 、Object.isSealed() 與 Object.isFrozen() 來分別檢查狀態,範例如下

let objPE = {
  a:123
};
let objSeal = {
  b:123
};
let objFrozen = {
  c:123
};
//
Object.preventExtensions( objPE );
Object.seal( objSeal );
Object.freeze( objFrozen );
//
console.log( Object.isExtensible( objPE ) );//false
console.log( Object.isSealed( objPE ) );//false
console.log( Object.isFrozen( objPE ) );//false

//
console.log( Object.isExtensible( objSeal ) );//false
console.log( Object.isSealed( objSeal ) );//true
console.log( Object.isFrozen( objSeal ) );//false

//
console.log( Object.isExtensible( objFrozen ) );//false
console.log( Object.isSealed( objFrozen ) );//true
console.log( Object.isFrozen( objFrozen ) );//true


範例準備三個物件分別做 Object.preventExtensions() 、Object.seal() 與 Object.freeze()  ,接著分別用檢查個別狀態,經過 Object.preventExtensions() 後,不算是 seal 與 freeze ,接著經過 Object.seal() 後 ,算是 preventExtensions 但不算是 freeze ,最後經過 freezec 後,不但是 preventExtensions  也是 seal  ,這三個相似功能看似個別獨立,但事實上是有相關性的!在使用時要注意這個特性。


參考資料

[ developer.mozilla.org ] Object.isExtensible()

[ developer.mozilla.org ] Object.isSealed()

[ developer.mozilla.org ] Object.isFrozen()


相關文章與資料

禁止擴充物件的另一個選擇

沒有留言:

張貼留言