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 相关文章推荐
JavaScript在XHTML中的用法详解
Apr 11 Javascript
22点关于jquery性能优化的建议
May 28 Javascript
Javascript封装DOMContentLoaded事件实例
Jun 12 Javascript
AngularJS页面访问时出现页面闪烁问题的解决
Mar 06 Javascript
Angular实现跨域(搜索框的下拉列表)
Feb 16 Javascript
jQuery实现导航栏头部菜单项点击后变换颜色的方法
Jul 19 jQuery
JavaScript实现的斑马线表格效果【隔行变色】
Sep 18 Javascript
Node 自动化部署的方法
Oct 17 Javascript
angular基于ng-alain定义自己的select组件示例
Feb 23 Javascript
微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例
Dec 20 Javascript
Node.js中package.json中库的版本号(~和^)
Apr 02 Javascript
JS实现返回上一页并刷新页面的方法分析
Jul 16 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
第七节--类的静态成员
2006/11/16 PHP
PHP数组编码gbk与utf8互相转换的两种方法
2016/09/01 PHP
PHP实现字符串的全排列详解
2019/04/24 PHP
一个不错的用JavaScript实现的UBB编码函数
2007/03/09 Javascript
菜鸟javascript基础整理1
2010/12/06 Javascript
jquery绑定原理 简单解析与实现代码分享
2011/09/06 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
2012/08/14 Javascript
jquery自动填充勾选框即把勾选框打上true
2014/03/24 Javascript
jquery库或JS文件在eclipse下报错问题解决方法
2014/04/17 Javascript
JS使用getComputedStyle()方法获取CSS属性值
2014/04/23 Javascript
jquery动态改变form属性提交表单
2014/06/03 Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
2016/09/05 Javascript
Angular2 环境配置详细介绍
2016/09/21 Javascript
Vue中封装input组件的实例详解
2017/10/17 Javascript
vue2.0 + ele的循环表单及验证字段方法
2018/09/18 Javascript
webpack+vue+express(hot)热启动调试简单配置方法
2018/09/19 Javascript
jquery实现垂直手风琴导航栏
2020/02/18 jQuery
JS操作Fckeditor的一些常用方法(获取、插入等)
2020/02/19 Javascript
微信小程序图片右边加两行文字的代码
2020/04/23 Javascript
[01:15:18]2014 DOTA2国际邀请赛中国区预选赛 LGD VS Speed Gaming.cn
2014/05/22 DOTA
[02:13] 完美世界DOTA2联赛PWL DAY5集锦
2020/11/03 DOTA
python选择排序算法实例总结
2015/07/01 Python
Python Web框架Tornado运行和部署
2020/10/19 Python
python生成多个只含0,1元素的随机数组或列表的实例
2018/11/12 Python
python 画出使用分类器得到的决策边界
2019/08/21 Python
django执行数据库查询之后实现返回的结果集转json
2020/03/31 Python
Python 添加文件注释和函数注释操作
2020/08/09 Python
python 实现弹球游戏的示例代码
2020/11/17 Python
jupyter使用自动补全和切换默认浏览器的方法
2020/11/18 Python
HTML5实现视频直播功能思路详解
2017/11/16 HTML / CSS
资产评估专业学生的自我鉴定
2013/11/14 职场文书
大学生翘课检讨书范文
2014/10/06 职场文书
工程款申请报告
2015/05/15 职场文书
2015年街道办事处工作总结
2015/05/22 职场文书
python实现腾讯滑块验证码识别
2021/04/27 Python
Python安装使用Scrapy框架
2022/04/12 Python