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 选择器项目实例分析及实现代码
Dec 28 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
Jun 28 Javascript
基于jquery插件实现常见的幻灯片效果
Nov 01 Javascript
封装好的js判断操作系统与浏览器代码分享
Jan 09 Javascript
jQuery插件slick实现响应式移动端幻灯片图片切换特效
Apr 12 Javascript
jQuery+ajax实现无刷新级联菜单示例
May 21 Javascript
bootstrap布局中input输入框右侧图标点击功能
May 16 Javascript
AngularJS 模块化详解及实例代码
Sep 14 Javascript
JavaScript常用正则函数用法示例
Jan 23 Javascript
js编写选项卡效果
May 23 Javascript
vue项目中公用footer组件底部位置的适配问题
May 10 Javascript
jQuery 获取除某指定对象外的其他对象 ( :not() 与.not())
Oct 10 jQuery
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
探讨:如何使用PhpDocumentor生成文档
2013/06/25 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
2014/01/30 PHP
php blowfish加密解密算法
2016/07/02 PHP
服务器安全设置的几个注册表设置
2007/07/28 Javascript
window.location.hash 属性使用说明
2010/03/20 Javascript
再次分享18个非常棒的jQuery表格插件
2011/04/10 Javascript
JQuery获取当前屏幕的高度宽度的实现代码
2011/07/12 Javascript
node.js超时timeout详解
2014/11/26 Javascript
javascript+canvas实现刮刮卡抽奖效果
2015/07/29 Javascript
简单实现Bootstrap标签页
2020/08/09 Javascript
jQuery Validate插件ajax方式验证输入值的实例
2017/12/21 jQuery
React注册倒计时功能的实现
2018/09/06 Javascript
vue实现拖拽的简单案例 不超出可视区域
2019/07/25 Javascript
Vue按时间段查询数据组件使用详解
2020/08/21 Javascript
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
Python爬取网易云音乐上评论火爆的歌曲
2017/01/19 Python
Python算法之求n个节点不同二叉树个数
2017/10/27 Python
如何实现删除numpy.array中的行或列
2018/05/08 Python
windows下python安装pip图文教程
2018/05/25 Python
python操作mysql代码总结
2018/06/01 Python
Apache部署Django项目图文详解
2019/07/30 Python
Python3 io文本及原始流I/O工具用法详解
2020/03/23 Python
15个Pythonic的代码示例(值得收藏)
2020/10/29 Python
PyCharm2020.3.2安装超详细教程
2021/02/08 Python
Wiggle新西兰:自行车、跑步、游泳
2020/05/06 全球购物
复核员上岗演讲稿
2014/01/05 职场文书
祖国在我心中的演讲稿
2014/05/04 职场文书
服务承诺书怎么写
2014/05/24 职场文书
以权谋私检举信范文
2015/03/02 职场文书
2015年志愿者服务工作总结
2015/04/20 职场文书
2015年统战工作总结
2015/05/19 职场文书
《合作意向书》怎么写?
2019/08/20 职场文书
html输入两个数实现加减乘除功能
2021/07/01 HTML / CSS
关于redisson缓存序列化几枚大坑说明
2021/08/04 Redis
mysql的Buffer Pool存储及原理
2022/04/02 MySQL
docker-compose部署Yapi的方法
2022/04/08 Servers