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 相关文章推荐
获取Javscript执行函数名称的方法
Dec 22 Javascript
JQuery 常用操作代码
Mar 14 Javascript
javascript里绝对用的上的字符分割函数总结
Jul 31 Javascript
2014 年最热门的21款JavaScript框架推荐
Dec 25 Javascript
javascript数组排序汇总
Jul 07 Javascript
Node.js下自定义错误类型详解
Oct 17 Javascript
Angular2下使用pdf插件的方法详解
Apr 29 Javascript
JavaScript闭包_动力节点Java学院整理
Jun 27 Javascript
微信小程序实现跟随菜单效果和循环嵌套加载数据
Nov 21 Javascript
配置eslint规范项目代码风格
Mar 11 Javascript
React Hook用法示例详解(6个常见hook)
Apr 28 Javascript
uniapp 微信小程序 自定义tabBar 导航
Apr 22 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
c#中的实现php中的preg_replace
2009/12/21 PHP
PHP chmod 函数与批量修改文件目录权限
2010/05/10 PHP
10个实用的PHP代码片段
2011/09/02 PHP
php自定义的格式化时间示例代码
2013/12/05 PHP
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
PHP内核探索:哈希表碰撞攻击原理
2015/07/31 PHP
Linux下编译redis和phpredis的方法
2016/04/07 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
2018/06/06 PHP
JavaScript Memoization 让函数也有记忆功能
2011/10/27 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
2012/03/16 Javascript
去掉gridPanel表头全选框的小例子
2013/07/18 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
jQuery+ajax中getJSON() 用法实例
2014/12/22 Javascript
js实现图片和链接文字同步切换特效的方法
2015/02/20 Javascript
Javascript 普通函数和构造函数的区别
2016/11/05 Javascript
详解express与koa中间件模式对比
2017/08/07 Javascript
如何开发出更好的JavaScript模块
2017/12/22 Javascript
使用react实现手机号的数据同步显示功能的示例代码
2018/04/03 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
2020/11/06 Javascript
Python编写百度贴吧的简单爬虫
2015/04/02 Python
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
2015/06/28 Python
使用TensorFlow实现SVM
2018/09/06 Python
python批量爬取下载抖音视频
2019/06/17 Python
Django使用消息提示简单的弹出个对话框实例
2019/11/15 Python
解决Pytorch训练过程中loss不下降的问题
2020/01/02 Python
Python如何实现的二分查找算法
2020/05/27 Python
python全栈开发语法总结
2020/11/22 Python
戴尔美国官网:Dell
2016/08/31 全球购物
美国领先的商务贺卡出版商:The Gallery Collection
2018/02/13 全球购物
Hush Puppies澳大利亚官网:舒适的男女休闲和正装鞋
2019/08/24 全球购物
程序员机试试题汇总
2012/03/07 面试题
linux面试题参考答案(10)
2013/11/04 面试题
夫妻分居协议书范本(有子女版)
2014/11/01 职场文书
2015年感恩节演讲稿(优选篇)
2015/03/20 职场文书
Pytorch 中net.train 和 net.eval的使用说明
2021/05/22 Python
MySQL 时间类型的选择
2021/06/05 MySQL