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树形控件脚本代码
Jul 24 Javascript
jQuery-Easyui 1.2 实现多层菜单效果的代码
Jan 13 Javascript
用jquery模仿的a的title属性(兼容ie6/7)
Jan 21 Javascript
基于jQuery+JSON的省市二三级联动效果
Jun 05 Javascript
前端JS面试中常见的算法问题总结
Dec 23 Javascript
Javascript 高性能之递归,迭代,查表法详解及实例
Jan 08 Javascript
JavaScript中防止微信浏览器被整体拖动的方法
Aug 25 Javascript
谈谈为什么你的 JavaScript 代码如此冗长
Jan 30 Javascript
Vue中的组件及路由使用实例代码详解
May 22 Javascript
VUE实现密码验证与提示功能
Oct 18 Javascript
Vue中登录验证成功后保存token,并每次请求携带并验证token操作
Sep 08 Javascript
Webpack3+React16代码分割的实现
Mar 03 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日期和时间函数集合
2007/11/16 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
2014/12/22 PHP
PHP永久登录、记住我功能实现方法和安全做法
2015/04/27 PHP
浅谈PHP中其他类型转化为Bool类型
2016/03/28 PHP
PHP实现的多文件上传类及用法示例
2016/05/06 PHP
php利用header函数下载各种文件
2016/08/24 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
2019/03/21 PHP
JavaScript 计算当天是本年本月的第几周
2009/03/22 Javascript
js 时间函数应用加、减、比较、格式转换的示例代码
2013/08/23 Javascript
中止javascript执行的方法
2014/02/14 Javascript
原生的html元素选择器类似jquery选择器
2014/10/15 Javascript
js实现鼠标经过表格行变色的方法
2015/05/12 Javascript
javascript数组去重小结
2016/03/07 Javascript
JavaScript隐式类型转换
2016/03/15 Javascript
jQuery extend()详解及简单实例
2017/05/06 jQuery
Vue.js仿微信聊天窗口展示组件功能
2017/08/11 Javascript
jQuery实现简单的回到顶部totop功能示例
2017/10/16 jQuery
前端防止用户重复提交js实现代码示例
2018/09/07 Javascript
微信小程序实现列表页的点赞和取消点赞功能
2018/11/02 Javascript
JavaScript时间与时间戳的转换操作实例分析
2018/12/07 Javascript
Vue2.x和Vue3.x的双向绑定原理详解
2020/11/05 Javascript
Python加pyGame实现的简单拼图游戏实例
2015/05/15 Python
Windows下python2.7.8安装图文教程
2016/05/26 Python
用yum安装MySQLdb模块的步骤方法
2016/12/15 Python
Python中利用LSTM模型进行时间序列预测分析的实现
2019/07/26 Python
python numpy数组中的复制知识解析
2020/02/03 Python
Python使用Paramiko控制liunx第三方库
2020/05/20 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
2020/11/27 Python
澳大利亚最大的护发和护肤品购物网站:RY
2019/12/26 全球购物
主持词开场白
2014/03/17 职场文书
动漫设计与制作专业推荐信
2014/07/07 职场文书
社区两委对照检查材料
2014/08/23 职场文书
群众路线教育实践活动自我剖析思想汇报
2014/10/04 职场文书
爸爸的三轮车观后感
2015/06/16 职场文书
导游词之茶卡盐湖
2019/11/26 职场文书
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server