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 相关文章推荐
做网页的一些技巧(续)
Feb 01 Javascript
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
Oct 11 Javascript
javascript移出节点removeChild()使用介绍
Apr 03 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
Jun 23 Javascript
jQuery实现数秒后自动提交form的方法
Mar 05 Javascript
浅谈jQuery操作类数组的工具方法
Dec 23 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
Apr 10 jQuery
js+html5实现复制文字按钮
Jul 15 Javascript
Vue中android4.4不兼容问题的解决方法
Sep 04 Javascript
微信小程序实现通过双向滑动缩放图片大小的方法
Dec 30 Javascript
JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例
Jan 29 Javascript
node.js如何根据URL返回指定的图片详解
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中mysql连接方式PDO使用详解
2015/02/25 PHP
左右悬浮可分组的网站QQ在线客服代码(可谓经典)
2012/12/21 Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
2013/04/18 Javascript
对 jQuery 中 data 方法的误解分析
2014/06/18 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
2016/01/07 Javascript
Node.js中Request模块处理HTTP协议请求的基本使用教程
2016/03/31 Javascript
JavaScript实现左右下拉框动态增删示例
2017/03/09 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
nodejs对express中next函数的一些理解
2017/09/08 NodeJs
薪资那么高的Web前端必看书单
2017/10/13 Javascript
解决Angular2 router.navigate刷新页面的问题
2018/08/31 Javascript
JS实现的全选、全不选及反选功能【案例】
2019/02/19 Javascript
对node通过fs模块判断文件是否是文件夹的实例讲解
2019/06/10 Javascript
JS防抖和节流实例解析
2019/09/24 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
[02:48]DOTA2英雄基础教程 暗夜魔王
2013/12/12 DOTA
[01:07:15]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第二场 1月25日
2021/03/11 DOTA
python和pyqt实现360的CLable控件
2014/02/21 Python
用Python实现一个简单的能够上传下载的HTTP服务器
2015/05/05 Python
浅析Python中signal包的使用
2015/11/13 Python
详解Python3中字符串中的数字提取方法
2017/01/14 Python
Python 中pandas.read_excel详细介绍
2017/06/23 Python
django模型层(model)进行建表、查询与删除的基础教程
2017/11/21 Python
Python+matplotlib绘制不同大小和颜色散点图实例
2018/01/19 Python
对python自动生成接口测试的示例讲解
2018/11/30 Python
python tkinter组件使用详解
2019/09/16 Python
python中对_init_的理解及实例解析
2019/10/11 Python
使用python实现画AR模型时序图
2019/11/20 Python
浅谈pymysql查询语句中带有in时传递参数的问题
2020/06/05 Python
美国领先的家庭健康检测试剂盒提供商:LetsGetChecked
2019/03/18 全球购物
说出数据连接池的工作机制是什么?
2013/04/19 面试题
什么是GWT的Module
2013/01/20 面试题
离退休人员聘用协议书
2014/11/24 职场文书
入党函调证明材料
2014/12/24 职场文书
见义勇为事迹材料
2014/12/24 职场文书
雄兵连:第三季先行图公开,天使恶魔联合,银河之力的新力量
2021/06/11 国漫