關於檢查 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()
沒有留言:
張貼留言