JavaScript中的对象的extensible属性介绍

作者:junjie 时间:2024-06-05 09:30:38 

JavaScript中,对象的extensible属性用于表示是否允许在对象中动态添加新的property。ECMAScript 3标准中,所有的对象都是extensible的。ECMAScript 5标准中,所有的对象默认仍是extensible的,但可以通过设定来改变这一属性。

查询一个对象是否是extensible的,可以使用Object.isExtensible()语句:


var o = {x:1};
console.log(Object.isExtensible(o));//true


使一个对象变成不是extensible的,可以使用Object.preventExtensions()语句:


Object.preventExtensions(o)
console.log(Object.isExtensible(o));//false


值得注意的是,由于没有Object.preventExtensions()的反操作语句,因此一旦某个对象被设定为非extensible后,将没有办法重新再将其设定为extensible。

Object.preventExtensions()语句作用的范围是对象自身,原型对象不受影响。如果某个对象被设定为非extensible,那么其原型对象中依然可以动态添加property,而这些动态添加的property也依然可以被对象继承到。

Object.seal()和Object.freeze()

Object.preventExtensions()可以防止在对象中动态添加新的property。除了这个操作,JavaScript中还存在另外两个更加严格的操作来保护对象:Object.seal()和Object.freeze()。

Object.seal()的作用是在Object.preventExtensions()的基础上,设定所有对象自身property的configurable属性为false。与Object.preventExtensions()操作一样,Object.seal()没有反操作,因此一旦将对象seal了之后将无法恢复其状态。在JavaScript中,可以通过Object.isSealed()来查询某个对象是否被seal了。

Object.freeze()的作用是在Object.seal()的基础上,将所有对象自身的property设定为只读。与Object.seal()和Object.preventExtensions()操作一样,Object.freeze()没有反操作,因此一旦将对象freeze了之后将无法恢复其状态。在JavaScript中,可以通过Object.isFrozen()来查询某个对象是否被freeze了。


console.log(Object.isSealed(o));//false
Object.seal(o);
console.log(Object.isSealed(o));//true
console.log(Object.isFrozen(o));//false
Object.freeze(o);
console.log(Object.isFrozen(o));//true


无论是Object.preventExtensions(),还是Object.seal()和Object.freeze(),其作用范围均为对象自身,对象的原型对象将不受影响。

标签:JavaScript,对象,extensible,属性
0
投稿

猜你喜欢

  • 对python中大文件的导入与导出方法详解

    2021-02-11 12:32:47
  • pycham查看程序执行的时间方法

    2022-12-25 20:41:47
  • go开发中引用静态库.a文件的方法

    2024-04-25 13:16:26
  • Go语言共享内存读写实例分析

    2024-05-21 10:20:02
  • Keras 多次加载model出错的解决方案

    2023-11-01 20:52:35
  • 全屏flash的尺寸分析

    2009-02-11 13:22:00
  • Python中的列表知识点汇总

    2021-06-01 05:00:50
  • python使用ddt过程中遇到的问题及解决方案【推荐】

    2021-08-25 09:20:44
  • 用ASP实现远程批量文件改名

    2007-09-12 12:23:00
  • 微信小程序 详解下拉加载与上拉刷新实现方法

    2024-04-23 09:31:09
  • 使用Python点云生成3D网格

    2023-02-06 18:32:45
  • 合理设置内存让数据库与其他程序共存

    2009-05-21 16:24:00
  • python统计中文字符数量的两种方法

    2022-11-16 00:24:08
  • 一文搞懂MySQL元数据锁(MDL)

    2024-01-14 18:29:08
  • ORACLE 数据库RMAN备份恢复

    2024-01-22 19:22:50
  • python选择排序算法的实现代码

    2021-06-19 07:51:10
  • hover悬停放大的翻页效果

    2008-05-19 12:20:00
  • Python之reload流程实例代码解析

    2022-04-19 11:42:24
  • Python中的自定义函数学习笔记

    2023-11-21 15:56:56
  • Python webargs 模块的简单使用

    2021-02-27 11:56:04
  • asp之家 网络编程 m.aspxhome.com