深入了解Object.freeze()和Object.seal()

news/2024/7/10 22:39:54 标签: es6

目录

    • Object.freeze()
    • Object.seal()
    • 对比Object.freeze()和Object.seal()
    • 拓展Object.preventExtensions()

Object.freeze()

官方MDN对Object.freeze()的说明,如下:

Object.freeze()方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象。

我们需要深入理解上面那几句话什么意思。

Object.freeze()做了哪些事情?

  • 设置Object.preventExtension(),禁止添加新属性(绝对存在)
  • 设置writable为false,禁止修改(绝对存在)
  • 设置configurable为false,禁止配置(绝对存在)
  • 禁止更改访问器属性(getter和setter)

从上可知,Object.freeze()禁止了所有可设置的内容。

另外,可以使用Object.isFrozen()判断一个对象是否是冻结对象。

Object.freeze()只是浅冻结,如果你理解浅拷贝就能理解浅冻结。

Object.seal()

官方MDN对Object.seal()的说明,如下:

Object.seal()方法封闭一个对象,阻止添加新属性并将所有现有属性标记为不可配置。当前属性的值只要可写就可以改变。

从概念上看,Object.seal()相比Object.freeze()就比较好理解了。

Object.seal()做了哪些事情?

  • 设置Object.preventExtension(),禁止添加新属性(绝对存在)
  • 设置configurable为false,禁止配置(绝对存在)
  • 禁止更改访问器属性(getter和setter)

另外,可以使用Object.isSealed()判断一个对象是否是封闭对象。

对比Object.freeze()和Object.seal()

使用Object.freeze()冻结的对象中的现有属性是不可变的。用Object.seal()密封的对象可以改变其现有属性。

拓展Object.preventExtensions()

官方MDN对Object.preventExtensions()的说明,如下:

Object.preventExtensions()方法让一个对象变的不可扩展,也就是永远不能再添加新的属性。

另外,可以使用Object.isExtensible()判断一个对象是否可扩展。

//空对象是特殊情况,设置Object.preventExtensions()后,以下情况都将被禁止:
var empty = {};
Object.preventExtensions(empty);
Object.isFrozen(empty) === true
Object.isSealed(empty) === true
Object.isExtensible(empty) === false

http://www.niftyadmin.cn/n/1581243.html

相关文章

英文总经理室财务部生产部业务部品管部卫生间

GM Office (General Manager Office) Finance Department (Department of Finance) Product Department (Department of Product) Business Department (Department of Business) Production Control Department (Department of Production Control) Rest Room 如果觉得TOILET感…

gulp和webpack的区别

基本区别: gulp可以进行js,htm,css,img的压缩打包,是自动化构建工具,可以将多个js文件或是css压缩成一个文件,并且可以压缩为一行,以此来减少文件体积,加快请求速度和减…

庆祝香港回归10周年

庆祝香港回归10周年 转载于:https://www.cnblogs.com/xA51121/archive/2007/07/01/801752.html

nodejs中的EventLoop

┌───────────────────────┐ ┌─>│ timers │<————— 执行 setTimeout()、setInterval() 的回调 │ └──────────┬────────────┘ | |<-- 执行所有 Next Tick Queue 以及 MicroTas…

让Pdftk 支持中日韩路径

for english version article, please have a look pdftk supports Chinese path nowPdftk是一个简单的、命令行的PDF编辑软件&#xff0c;可以合并/分割PDF文档、解开必要的输入密码、输出加密、给PDF文档加水印、从PDF文档中解出附件、将PDF文档变成一页等等&#xff0c;能够…

笔记:flutter中一些流行的 UI 相关库

笔记&#xff1a;flutter中一些流行的 UI 相关库 CSDN&#xff1a;https://jclee95.blog.csdn.net本文收录了很多在 flutter pub 上显示流行度较高的第三方UI库和UI框架&#xff0c;对它们的效果进行了截图&#xff0c;目的是方便开发时进行查找&#xff1b;这些模块多数来自于…

算法题:两个有序数组合并(最优解)

合并两个有序数组最优解: 时间复杂度:O(n) 空间复杂度:O(n) // 正向 var mergeSortedArray = function(arr1, arr2) {let m = 0;let n = 0;let news =