JavaScript中的对象的extensible属性介绍


Posted in Javascript onDecember 30, 2014

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 相关文章推荐
基于jQuery的message插件实现右下角弹出消息框
Jan 11 Javascript
Js 冒泡事件阻止实现代码
Jan 27 Javascript
jQuery中get和post方法传值测试及注意事项
Aug 08 Javascript
node.js中的fs.lstat方法使用说明
Dec 16 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
Feb 25 Javascript
模拟javascript中的sort排序(简单实例)
Aug 17 Javascript
AngularJs expression详解及简单示例
Sep 01 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
Feb 14 Javascript
4个顶级开源JavaScript图表库
Sep 29 Javascript
微信小程序实现图片滚动效果示例
Dec 05 Javascript
解决vue跨域axios异步通信问题
Apr 17 Javascript
Angular处理未可知异常错误的方法详解
Jan 17 Javascript
JavaScript中的对象序列化介绍
Dec 30 #Javascript
JavaScript中的数组特性介绍
Dec 30 #Javascript
JavaScript中数组成员的添加、删除介绍
Dec 30 #Javascript
JavaScript 实现打印,打印预览,打印设置
Dec 30 #Javascript
JavaScript中的数组操作介绍
Dec 30 #Javascript
jQuery中:first选择器用法实例
Dec 30 #Javascript
JavaScript中的类数组对象介绍
Dec 30 #Javascript
You might like
聊天室php&mysql(六)
2006/10/09 PHP
中篇:安装及配置PHP
2006/12/13 PHP
解决phpmyadmin中文乱码问题。。。
2007/01/18 PHP
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
2007/03/29 PHP
关于Appserv无法打开localhost问题的解决方法
2009/10/16 PHP
PHP判断文件是否存在、是否可读、目录是否存在的代码
2012/10/03 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
2014/01/14 PHP
CakePHP框架Model关联对象用法分析
2017/08/04 PHP
两个多选select(multiple左右)添加、删除选项和取值实例
2014/05/12 Javascript
js构造函数、索引数组和属性的实现方式和使用
2014/11/16 Javascript
JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)
2015/12/03 Javascript
js创建对象的方法汇总
2016/01/07 Javascript
JavaScript 2048 游戏实例代码(简单易懂)
2016/03/25 Javascript
Bootstrap 粘页脚效果
2016/03/28 Javascript
JS禁止查看网页源代码的实现方法
2016/10/12 Javascript
vue实现ajax滚动下拉加载,同时具有loading效果(推荐)
2017/01/11 Javascript
深入了解JavaScript 的 WebAssembly
2019/06/15 Javascript
VScode格式化ESlint方法(最全最好用方法)
2019/09/10 Javascript
JavaScript算法学习之冒泡排序和选择排序
2019/11/02 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
js实现图片上传到服务器和回显
2020/01/19 Javascript
[01:16:28]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第二场 2月23日
2021/03/11 DOTA
Python3导入自定义模块的三种方法详解
2018/04/13 Python
Python读取YUV文件,并显示的方法
2018/12/04 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
2019/01/04 Python
一篇文章搞懂python的转义字符及用法
2020/09/03 Python
用css3实现转换过渡和动画效果
2020/03/13 HTML / CSS
英国马莎百货官网:Marks & Spencer
2016/07/29 全球购物
乌克兰鞋类购物网站:Eobuv.com.ua
2020/11/28 全球购物
介绍Ibatis的核心类
2013/11/18 面试题
财务会计应届生求职信
2013/11/24 职场文书
学年末自我鉴定
2014/01/21 职场文书
外贸采购员岗位职责
2015/04/03 职场文书
2015年九一八事变纪念活动实施方案
2015/05/06 职场文书
2015学校年度工作总结
2015/05/11 职场文书
网聊搭讪开场白
2015/05/28 职场文书