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 prototype 原型链
Mar 12 Javascript
javascript css styleFloat和cssFloat
Mar 15 Javascript
flexigrid 类似ext grid的JS表格代码
Jul 17 Javascript
动态的改变IFrame的高度实现IFrame自动伸展适应高度
Dec 28 Javascript
Javascript 判断是否存在函数的方法
Jan 03 Javascript
jQuery实现html表格动态添加新行的方法
May 28 Javascript
详解JS正则replace的使用方法
Mar 06 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
Dec 22 Javascript
对Layer弹窗使用及返回数据接收的实例详解
Sep 26 Javascript
Vue的双向数据绑定实现原理解析
Feb 17 Javascript
Vue 中获取当前时间并实时刷新的实现代码
May 12 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
Nov 05 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面向对象分析设计的61条军规小结
2010/07/17 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
2017/11/28 PHP
PDO::errorCode讲解
2019/01/28 PHP
Jquery+WebService 校验账号是否已被注册的代码
2010/07/12 Javascript
javascipt基础内容--需要注意的细节
2013/04/10 Javascript
jquery实现用户打分评分特效
2015/05/28 Javascript
JavaScript中的getTime()方法使用详解
2015/06/10 Javascript
jquery实现全选、不选、反选的两种方法
2016/09/06 Javascript
在JavaScript中调用Java类和接口的方法
2016/09/07 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
2016/12/28 Javascript
Bootstrap表格使用方法详解
2017/02/17 Javascript
nodeJS进程管理器pm2的使用
2019/01/09 NodeJs
关于layui的下拉搜索框异步加载数据的解决方法
2019/09/28 Javascript
vue.js实现简单的计算器功能
2020/02/22 Javascript
Django中模版的子目录与include标签的使用方法
2015/07/16 Python
Python随机生成带特殊字符的密码
2016/03/02 Python
使用python实现tcp自动重连
2017/07/02 Python
对matplotlib改变colorbar位置和方向的方法详解
2018/12/13 Python
python3 http提交json参数并获取返回值的方法
2018/12/19 Python
浅谈Python爬虫基本套路
2019/03/25 Python
DJango的创建和使用详解(默认数据库sqlite3)
2019/11/18 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
2020/02/11 Python
专门出售各种儿童读物的网站:Put Me In The Story
2016/08/07 全球购物
法国女性内衣购物网站:Glamuse
2019/05/13 全球购物
领导干部培训感言
2014/01/23 职场文书
护理中职生求职信范文
2014/02/24 职场文书
《姥姥的剪纸》教学反思
2014/02/25 职场文书
户外活动策划方案
2014/03/12 职场文书
和睦家庭事迹
2014/05/14 职场文书
计算机专业求职信
2014/06/02 职场文书
解除劳动合同协议书范本2014
2014/09/25 职场文书
超市工作总结范文2014
2014/12/19 职场文书
幼儿园托班开学寄语(2016秋季)
2015/12/03 职场文书
小学科学课教学反思
2016/02/23 职场文书
Tomcat用户管理的优化配置详解
2022/03/31 Servers