一文彻底搞懂JavaScript 中Object.freeze与Object.seal的用法( 二 )


对象密封我们还有一种方法可以知道对象是否被密封 。非常明确地 , 我们可以调用Object.isSealed来知道:
Object.isSealed(objectToSeal); // === truelet notSealedObj = { a: 54 };Object.isSealed(notSealedObj); // === falseconst呢?您可能会想看看Object.seal和Object.freeze并将它们与const进行比较 。请记住 , 它们是不同的概念 。Object.freeze和Object.seal适用于对象的值 , 而const适用于binding 。Object.freeze使对象不可变 。const创建一个不可变的绑定 。为变量分配值后 , 就无法为该绑定分配新值 。
原型呢?我最后要提的一件事是:原型 。如果您不熟悉JAVAscript原型 , 我会写一篇文章 。当涉及到Object.freeze和Object.seal时 , 要知道一旦冻结或密封它们后就不能更改它们的原型 。
let freezeThat = {name: 'Damien'}let sealThis = {age 28}Object.freeze(freezeThat)Object.seal(sealThis)// These two lines will fail!Object.setPrototypeOf(freezeThat, {x: 26})Object.setPrototypeOf(sealThis, {alive: true})setPrototypeOf用于更改对象的原型 。将对象密封或冻结后 , 您将无法执行此操作 。与往常一样 , 在非严格模式下 , 它将静默失败 。在严格模式下 , 您会看到TypeError: Object is not extensible.
结论了解Object.freeze和Object.seal之间的区别很重要 。意识到这些差异将避免您在代码中使用它们时遇到麻烦 。
回顾一下:

一文彻底搞懂JavaScript 中Object.freeze与Object.seal的用法

文章插图
 
 



推荐阅读