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 相关文章推荐
弹出广告特效(一个IP只弹出一次)的代码
Jul 27 Javascript
自己动手实现jQuery Callbacks完整功能代码详解
Nov 25 Javascript
Chrome下ifame父窗口调用子窗口的问题示例探讨
Mar 17 Javascript
jquery马赛克拼接翻转效果代码分享
Aug 24 Javascript
Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别
Dec 30 Javascript
jQuery的框架介绍
May 11 Javascript
Node.js 8 中的重要新特性
Jun 28 Javascript
JS使用贪心算法解决找零问题示例
Nov 27 Javascript
使用form-create动态生成vue自定义组件和嵌套表单组件
Jan 18 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
Apr 15 Javascript
在vue中使用Base64转码的案例
Aug 07 Javascript
Vue封装Axios请求和拦截器的步骤
Sep 16 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中使用PDF文档功能
2006/10/09 PHP
php专用数组排序类ArraySortUtil用法实例
2015/04/03 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
2016/02/15 PHP
Symfony模板的快捷变量用法实例
2016/03/17 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
基于PHP实现生成随机水印图片
2020/12/09 PHP
宝塔面板在NGINX环境中TP5.1如何运行?
2021/03/09 PHP
js中几种去掉字串左右空格的方法
2006/12/25 Javascript
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
2010/10/22 Javascript
提升你网站水平的jQuery插件集合推荐
2011/04/19 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
jQuery取id有.的值的方法
2014/05/21 Javascript
完美兼容各大浏览器获取HTTP_REFERER方法总结
2014/06/24 Javascript
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
JS模拟按钮点击功能的方法
2015/12/22 Javascript
你有必要知道的25个JavaScript面试题
2015/12/29 Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
2016/05/18 Javascript
Angular 5.0 来了! 有这些大变化
2017/11/15 Javascript
JavaScript实现重力下落与弹性效果的方法分析
2017/12/20 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
2018/03/05 Javascript
微信小程序报错: thirdScriptError的错误问题
2020/06/19 Javascript
Vue路由 重定向和别名的区别说明
2020/09/09 Javascript
python操作日期和时间的方法
2014/03/11 Python
pymongo给mongodb创建索引的简单实现方法
2015/05/06 Python
Python pickle模块用法实例分析
2015/05/27 Python
浅谈flask中的before_request与after_request
2018/01/20 Python
详解python分布式进程
2018/10/08 Python
python3 打印输出字典中特定的某个key的方法示例
2019/07/06 Python
Python:二维列表下标互换方式(矩阵转置)
2019/12/02 Python
伦敦高达60%折扣的钻石珠宝商:Purely Diamonds
2018/06/24 全球购物
英文留学推荐信范文
2014/01/25 职场文书
个人简历自我评价范文
2014/02/04 职场文书
教师见习期自我鉴定
2014/04/28 职场文书
精神文明建设先进工作者事迹材料
2014/05/02 职场文书
2015企业年终工作总结范文
2015/05/27 职场文书
Springboot使用Spring Data JPA实现数据库操作
2021/06/30 Java/Android