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 相关文章推荐
DHTML 中的绝对定位
Nov 26 Javascript
jquery text(),val(),html()方法区别总结
Nov 04 Javascript
document.forms[].submit()使用介绍
Feb 19 Javascript
jQuery使用之设置元素样式用法实例
Jan 19 Javascript
AngularJs动态加载模块和依赖注入详解
Jan 11 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
Jul 26 Javascript
JavaScript队列、优先队列与循环队列
Nov 14 Javascript
web.js.字符串与正则表达式操作
May 13 Javascript
Three.js实现浏览器变动时进行自适应的方法
Sep 26 Javascript
JS去掉字符串中所有的逗号
Oct 18 Javascript
JS中DOM元素的attribute与property属性示例详解
Sep 04 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
Oct 31 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加密解密函数代码
2013/06/19 PHP
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
2014/10/29 PHP
如何批量清理系统临时文件(语言:C#、 C/C++、 php 、python 、java )
2016/02/01 PHP
jQuery获取CSS样式中的颜色值的问题,不同浏览器格式不同的解决办法
2013/05/13 Javascript
js监听键盘事件示例代码
2013/07/26 Javascript
js自动生成对象的属性示例代码
2013/10/28 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
2015/09/22 Javascript
js实现下拉列表选中某个值的方法(3种方法)
2015/12/17 Javascript
JQuery的attr 与 val区别
2016/06/12 Javascript
JavaScript实现移动端页面按手机屏幕分辨率自动缩放的最强代码
2017/08/18 Javascript
Vue 滚动行为的具体使用方法
2017/09/13 Javascript
使用express搭建一个简单的查询服务器的方法
2018/02/09 Javascript
实例讲解Vue.js中router传参
2018/04/22 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
python抓取网页时字符集转换问题处理方案分享
2014/06/19 Python
Python 包含汉字的文件读写之每行末尾加上特定字符
2016/12/12 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
2017/09/22 Python
python将文本分每两行一组并保存到文件
2018/03/19 Python
详解flask入门模板引擎
2018/07/18 Python
kaggle+mnist实现手写字体识别
2018/07/26 Python
Python解析Excle文件中的数据方法
2018/10/23 Python
Pycharm 实现下一个文件引用另外一个文件的方法
2019/01/17 Python
python 对字典按照value进行排序的方法
2019/05/09 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
python logging添加filter教程
2019/12/24 Python
利用CSS3 动画 绘画 圆形动态时钟
2018/03/20 HTML / CSS
音乐学院硕士生的自我评价分享
2013/11/01 职场文书
国贸专业大学生职业生涯规划范文
2014/01/10 职场文书
投标人廉洁自律承诺书
2014/05/26 职场文书
实习生个人总结范文
2015/02/28 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书
Nginx安装完成没有生成sbin目录的解决方法
2021/03/31 Servers
Python基础之字符串格式化详解
2021/04/21 Python
教你怎么用Python实现多路径迷宫
2021/04/29 Python
Pytorch可视化的几种实现方法
2021/06/10 Python
react中useState使用:如何实现在当前表格直接更改数据
2022/08/05 Javascript