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

2023-05-16

目录

    • 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深入了解Object.freeze()和Object.seal() 的相关文章

  • vb.net返回多种类型的json对象?

    我需要从 Web 服务返回一些数据 如下所示 data page 1 data count 12883 data rows 0 id 1 data rows 0 name bob data rows 1 id 2 data rows 1 n
  • 如何冻结所有可冻结的 WPF 对象?

    我想冻结窗口中的所有可冻结对象 以获得更好的性能 为此 我使用了几个像这样的循环 foreach Brush item in FindLogicalChildren
  • Python Popen().stdout.read() 挂起

    我正在尝试使用 Python 获取另一个脚本的输出subprocess Popen就像下面这样 process Popen command stdout PIPE shell True exitcode process wait outpu
  • 有没有一种方法可以在一行中从数组值设置对象键

    假设我有一个像这样的数组 const myArray HP QP PS 我想要一个对象 其键是myArray的值如 HP 0 QP 0 PS 0 有没有办法在一行中执行以下操作 const myObj myArray forEach ite
  • 如何在powershell中获取对象属性的名称?

    我知道我可以使用 get member 来获取对象的所有属性 但我正在浏览对象列表 并且我对名称不断变化的最后一个属性感兴趣 为了自动化我的脚本 我试图获取最后一个属性的名称 但我不确定如何获取 假设我有 result get member
  • JavaScript 对象如何引用其自身的值? [复制]

    这个问题在这里已经有答案了 假设我有以下 JavaScript var obj key1 it key2 key1 works alert obj key2 此错误显示 key1 未定义 我努力了 this key1 this key1 o
  • obj.prototype = new ParentObj(); 之后的对象方法消失了在 JavaScript 中

    我正在尝试在 JavaScript 中继承对象 看一下这个例子 var BaseObject function var ChildObject function ChildObject prototype childMethod funct
  • 使用 jdk 8 时 Java 模态对话框冻结整个应用程序

    很少 当使用 Java Swing 应用程序显示模式对话框时JDK1 8 0 144 整个应用程序被冻结 我在 JDK bug 数据库中找不到相关的 bug 唯一看起来远程相关的是this one https bugs openjdk ja
  • WinDbg:APPLICATION_HANG_WRONG_SYMBOLS

    我对 WinDbg 还很陌生 我正在尝试找到一个导致我的应用程序无缘无故挂起的错误 我不确定我做的事情是否正确 但我知道我需要系统 dll 以及我正在调试的 exe 的符号 因此 我这样设置符号路径 srv c websymbols htt
  • python 对象可以有嵌套属性吗?

    我有一个定义如下的对象 class a property def prop self print hello from object prop property def prop1 self print Hello from object
  • 如何通过 while/for 循环创建类的许多精确实例(以访问其属性)?

    我正在尝试使用 pygame 制作 atari 突破风格游戏 并且我希望可破坏的块是具有某些属性的对象 我可以随着游戏的进行而更改这些属性 因此 我创建了一个 Block 类和一个后续函数 该函数多次循环遍历该类 将实例分配给列表 我遇到的
  • PHP:对象上的递归 htmlspecialchars

    我想为来自不同来源的数据建立一个通用的清理程序 对于清理 我的意思是 在这个阶段 将 htmlspecialchars 应用于字符串 现在 来自这些源的数据可以是任何东西 从对象到数组再到字符串 都是嵌套的 而且很复杂 并且格式总是有点不同
  • Objective-C 中的类对象和实例变量

    我很难理解这个概念 我直接引用书中的一句话 类对象还继承自层次结构中位于其上方的类 但因为它们没有实例变量 只有实例有 所以它们只继承方法 如果我错了 请纠正我 但类对象将是这样的 NSString aString NSString all
  • 如何编写一个函数来测试链接列表是否已排序

    我查看了其他帖子 但没有找到适合我的查询的很好的解决方案 我不想对链接列表进行实际排序 我想看看它是否已排序 我有一个 C 中的链表问题 我被要求编写一个给定链表定义的函数来查看它是否已排序 实现函数 isSorted 如果链表中的值按升序
  • var->myProperty 和 var.myProperty 之间的区别

    我是 Objective C 的新手 我有一些疑问 我发现您可以访问类的属性 例如var gt 我的属性也喜欢那样变量 myProperty 但我不知道2之间有什么区别 我在互联网上搜索了很多 但确实没有找到确凿的答案 抱歉 如果我有拼写错
  • Python 在计算机睡眠/休眠后冻结

    我有一个使用 pythonw 在后台运行的 python 脚本 如果我关闭笔记本电脑 它就会进入睡眠模式 当我打开笔记本电脑时 我的程序几乎没有任何功能 并在几秒钟后冻结 有什么方法可以让我的脚本知道我的计算机是否进入睡眠模式 以便它可以处
  • JAVA - 如何将一个对象的属性复制到另一个具有相同属性的对象?

    假设我们有一个对象 A 定义如下 public class ObjectA private Attribute a1 private Attribute a2 private Attribute a3 由于某种原因 我需要创建第二个对象 B
  • 如何转换该对象数组?

    我有个问题 我有该对象数组 const iHaveThis question What s your name answer dda form filled key 15 question What s your e mail answer
  • 当Python只应附加到一个列表时,它附加到两个列表

    我有一个名为 团队 的列表 其中包含两个对象 这些对象是同一类的对象 并且它们都有一个 成员 列表 我将单独附加到这些列表中 请参阅 Fight AddParticipant 但我附加的两个参与者对象似乎最终出现在两个团队对象中 这是意外行
  • 在 Javascript 中获取类的所有实例

    我以为这个问题已经有了答案 但我似乎找不到答案 如何在 Javascript 中的此类的所有实例上运行特定的类方法 这必须在我不知道实例名称的情况下完成 我想我可以在类中使用某种静态变量来存储所有实例 但这在 JS 中似乎不存在 那么如何在

随机推荐

  • 主流深度学习算法简介

    深度学习算法简介 1 深度学习主流算法包括 1 1 CNN 卷积神经网络 卷积神经网络 xff08 CNN xff09 是最常见的深度学习方法之 一 自20 世纪80 年代后期以来 xff0c CNN 已应用于视觉识别与分类任务 xff0c
  • 常见外贸英文术语(下)

    很多从事外贸行业的人都会用Skype IntBell AntTone等网络电话和客户沟通 xff0c 但是有时候会因为一些外贸行业的专业英文术语闹出笑话 今天就让我们来总结一些外贸常见英文术语 xff0c 让你和客户沟通更加顺畅 xff01
  • Phpstorm2018 使用破解补丁永久激活

    1 安装phpstorm xff0c 安装包请自行官网下载 http www jetbrains com phpstorm download 2 下载JetbrainsCrack jar文件 xff0c 存放至你的phpstorm执行文件同
  • va_start 与 va_end用法

    1 包含头文件 include lt stdarg h gt 2 使用方法 参考 http www cnblogs com hanyonglu archive 2011 05 07 2039916 html include lt stdio
  • jetson-sd卡制作(批量烧写)

    jetson系列如果使用sd卡开发 xff0c 开发完成后可以不用重新制作根文件系统 拷贝目前的SD卡即可实现批量烧写 一 开发好的SD卡制作img文件 1 将sd卡插到PC端 xff0c 查看sd卡设备 eg dev sdd fdisk
  • 结构体知识点

    结构体的结构如下 xff1a span class token comment 关键字struct是数据类型说明符 xff0c 指出下面说明的是结构体类型 span span class token keyword struct span
  • SurfaceView 的一般绘制View用法(一)

    前段时间写了不少关于自定义View相关的文章 xff0c 最近两个项目同时开工 xff0c 忙成狗了 xff0c 这不是不写博客的理由哈 xff0c 今晚写一篇关于SurfaceView相关的博客 xff0c 还是和以前一样 xff0c 今
  • WorkerMan实现Web通讯(使用Vue实现前端页面逻辑)

    需要使用到的扩展 https github com tangbc vue virtual scroll list 最终效果 对话框 主页面 Main vue lt template gt lt div gt lt chat message
  • [VS][原创]vs2019新建项目提示未正确加载nvdapackage包

    第一步 xff1a 确认cuda 43 cudnn以及驱动程序都安装了 第二步 xff1a 从win11菜单栏搜索打开Developer Command Prompt for VS 2019 xff0c 注意要以管理员身份运行 xff0c
  • 2016年linux c程序员和初学者不得错过的精品图书18册

    1 图书名称 零点起飞学Linux C编程 图书信息 陈冠军 清华大学出版社 2013 09 01 2 图书名称 Linux C从入门到精通 图书信息 明日科 清华大学出版社 2012 12 01 3 图书名称 Linux C编程一站式学习
  • 面试造飞机系列:看架构师如何设计微服务接口

    来源 后端技术学堂 责编 Carol 封图 CSDN下载于视觉中国 在微服务设计中 xff0c 服务间接口通信设计常见的有两种方式 xff1a RPC 和 REST xff0c 关于微服务和 RPC 的更多细节 xff0c 可以参考我上一篇
  • C++ 数组(vector)常用操作总结

    目录 1 vector对象的定义和初始化方式 2 vector 常用基础操作 3 使用迭代器的遍历 插入 删除操作 4 vector 元素的重排操作 xff08 排序 逆序等 xff09 5 vector 中找最值 6 改变vector大小
  • ROS 节点初始化步骤、topic/service创建及使用

    目录 1 节点初始化步骤 2 service 创建及使用 3 topic创建及使用 4 框架总结 这是一个总结复盘的记录 1 节点初始化步骤 在 mian 函数中使用 ros init 初始化节点 xff0c 注册节点名 xff0c 这里注
  • Docker+xrdp+understand

    创建容器 我使用的是Ubuntu18 04的镜像 xff0c 注意把3389端口映射出来 docker run it name understand p 3399 3389 ubuntu 18 04 安装xrdp协议 span class
  • 如何下载Amazon页面产品视频

    step1 右键 查看网页源码 step2 ctrl 43 f查找 MP4 step3 xff1a 复制相关URL
  • 高速信号参考GND平面和VCC平面,会带来不同的回路阻抗,影响信号质量

    1 1参考平面作用 参考平面的作用之一是就是给信号提供回流路径 xff0c 对于信号来说 xff0c 不管任何网络的铜平面都可以作为参考平面 选择GND作为参考平面与其他网络的区别在于 xff0c 使用其他网络提供回流路径时 xff0c 网
  • 如何理解防抖debounce和节流throttle

    本人通过阅读网络上防抖和节流多篇相关的文章 xff0c 并借鉴相关案例进行说明 防抖 防抖就像人眨眼睛一样 xff0c 不可能不停的眨 xff0c 每隔一定时间眨一下 xff0c 防止眼睛干涩 xff0c 如果不停眨眼 xff0c 别人以为
  • 1024快乐!浅谈scrollTop需要踩的坑

    开始之前 xff0c 需要分清楚scrollTo和scrollTop 坑one 1 设置浏览器scrollTop 最好通过用户操作设置滚动 xff0c 或者setTimeout延时滚动 span class token comment Ch
  • 如何写出高效的 Vue 代码

    开讲之前我先简单的自我介绍一下 xff0c 本人自喻 xff1a flitrue xff0c 工作三年有余 xff0c 在一家不知名的互联网企业担任前端架构师之职 技术选型问题 近几年前端发展快速 xff0c 很多同学抱怨学不动了 xff0
  • 深入了解Object.freeze()和Object.seal()

    目录 Object freeze Object seal 对比Object freeze 和Object seal 拓展Object preventExtensions Object freeze 官方MDN对Object freeze 的