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 相关文章推荐
JS常用函数使用指南
Nov 23 Javascript
详解HTML5 使用video标签实现选择摄像头功能
Oct 25 Javascript
vue.js中created方法作用
Mar 30 Javascript
js实现轮播图的完整代码
Oct 26 Javascript
angularJS实现不同视图同步刷新详解
Oct 09 Javascript
JS中min函数实例讲解
Feb 18 Javascript
解决Idea、WebStorm下使用Vue cli脚手架项目无法使用Webpack别名的问题
Oct 11 Javascript
JavaScript 反射和属性赋值实例解析
Oct 28 Javascript
webpack的 rquire.context用法实现工程自动化的方法
Feb 07 Javascript
JS自定义右键菜单实现代码解析
Jul 16 Javascript
原生JS实现多条件筛选
Aug 19 Javascript
uniapp实现横向滚动选择日期
Oct 21 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学习之运算符相关概念
2011/06/09 PHP
php读取excel文件示例分享(更新修改excel)
2014/02/27 PHP
php环境套包 dedeampz 伪静态设置示例
2014/03/26 PHP
PHP内置的Math函数效率测试
2014/12/01 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
PHP框架性能测试报告
2016/05/08 PHP
Laravel实现短信注册的示例代码
2018/05/29 PHP
javascript使用定时函数实现跳转到某个页面
2013/12/25 Javascript
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
javascript实现自动输出文本(打字特效)
2015/08/27 Javascript
js事件处理程序跨浏览器解决方案
2016/03/27 Javascript
微信小程序 网络API发起请求详解
2016/11/09 Javascript
Javascript设计模式之装饰者模式详解篇
2017/01/17 Javascript
JavaScript 栈的详解及实例代码
2017/01/22 Javascript
javascript观察者模式实现自动刷新效果
2017/09/05 Javascript
vue源码学习之Object.defineProperty 对数组监听
2018/05/30 Javascript
基于Vue 实现一个中规中矩loading组件
2019/04/03 Javascript
vue 取出v-for循环中的index值实例
2019/11/09 Javascript
Openlayers绘制聚合标注
2020/09/28 Javascript
vue使用echarts图表自适应的几种解决方案
2020/12/04 Vue.js
Python MD5加密实例详解
2017/08/02 Python
Python序列化基础知识(json/pickle)
2017/10/19 Python
Windows下安装Django框架的方法简明教程
2018/03/28 Python
对python的bytes类型数据split分割切片方法
2018/12/04 Python
python字符串拼接+和join的区别详解
2020/12/03 Python
CSS3制作轮播图的一种方法
2019/11/11 HTML / CSS
荷兰天然和有机产品网上商城:BigGreenSmile.nl
2020/07/26 全球购物
求职自荐书范文
2013/12/04 职场文书
信息系统专业个人求职信范文
2013/12/07 职场文书
写演讲稿所需要注意的4个条件
2014/01/09 职场文书
2014小学一年级班主任工作总结
2014/12/05 职场文书
自我检讨报告
2015/01/28 职场文书
前台岗位职责范本
2015/04/16 职场文书
2016新年问候语大全
2015/11/11 职场文书
python中的class_static的@classmethod的巧妙用法
2021/06/22 Python
关于EntityWrapper的in用法
2022/03/22 Java/Android