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中文入门指南,翻译加实例,jQuery的起点教程
Feb 09 Javascript
javascript中onmouse事件在div中失效问题的解决方法
Jan 09 Javascript
jQuery插件 selectToSelect使用方法
Oct 02 Javascript
javascript中的括号()用法小结
Apr 14 Javascript
javascript实现的平方米、亩、公顷单位换算小程序
Aug 11 Javascript
jQuery实现的超酷苹果风格图标滑出菜单效果代码
Sep 16 Javascript
实例详解jQuery表单验证插件validate
Jan 18 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单
Nov 25 Javascript
Angular2整合其他插件的方法
Jan 20 Javascript
利用vscode调试编译后的js代码详解
May 14 Javascript
JS一次前端面试经历记录
Mar 19 Javascript
JavaScript类的继承多种实现方法
May 30 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 Smarty生成EXCEL文档的代码
2008/08/23 PHP
PHP stream_context_create()作用和用法分析
2011/03/29 PHP
用PHP读取超大文件的实例代码
2012/04/01 PHP
Codeigniter实现发送带附件的邮件
2015/03/19 PHP
Thinkphp框架开发移动端接口(1)
2016/08/18 PHP
JS 动态获取节点代码innerHTML分析 [IE,FF]
2009/11/30 Javascript
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
js动态往表格的td中添加图片并注册事件
2014/06/12 Javascript
JavaScript按值删除数组元素的方法
2015/04/24 Javascript
Agularjs妙用双向数据绑定实现手风琴效果
2017/05/26 Javascript
深入理解AngularJs-scope的脏检查(一)
2017/06/19 Javascript
微信小程序项目实践之验证码倒计时功能
2018/07/18 Javascript
微信小程序 下拉刷新及上拉加载原理解析
2019/11/06 Javascript
使用Vue.set()方法实现响应式修改数组数据步骤
2019/11/09 Javascript
自己使用总结Python程序代码片段
2015/06/02 Python
Python科学计算包numpy用法实例详解
2018/02/08 Python
利用python如何处理nc数据详解
2018/05/23 Python
Python简单过滤字母和数字的方法小结
2019/01/09 Python
Python File(文件) 方法整理
2019/02/18 Python
python+numpy实现的基本矩阵操作示例
2019/07/19 Python
django 单表操作实例详解
2019/07/30 Python
Python内置加密模块用法解析
2019/11/25 Python
Django关于admin的使用技巧和知识点
2020/02/10 Python
聊聊python中的异常嵌套
2020/09/01 Python
python调用win32接口进行截图的示例
2020/11/11 Python
买卖正宗运动鞋:GOAT
2019/12/06 全球购物
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
质量工程师岗位职责
2013/11/16 职场文书
申论倡议书范文
2014/05/13 职场文书
十佳文明家庭事迹
2014/05/25 职场文书
私人委托书格式
2014/09/10 职场文书
志愿者事迹材料
2014/12/26 职场文书
2015年社区中秋节活动总结
2015/03/23 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
建筑工程材料员岗位职责
2015/04/11 职场文书
python如何进行基准测试
2021/04/26 Python