JavaScript创建防篡改对象的方法分析


Posted in Javascript onDecember 30, 2018

本文实例讲述了JavaScript创建防篡改对象的方法。分享给大家供大家参考,具体如下:

之前的 JavaScript,开发人员可能会意外修改了别人的代码,甚至重写原生对象!现在,在 ECMAScript 5 中可以定义防篡改对象啦O(∩_∩)O~

不过,一旦把对象定义为防篡改之后,就无法撤销了哦。

1 不可扩展对象

默认情况下,所有的对象都是可扩展的,即可以随意地添加属性和方法。现在,使用 Object.preventExtensions(person) 方法后,对象就不可以扩展咯:

<script type="text/javascript">
  var person = {name: "deniro"};
  //  person.age = 29;
  //  console.log(person.age);
  console.log(Object.isExtensible(person));//true
  Object.preventExtensions(person);
  person.age = 15;
  console.log(person.age);//undefined
  console.log(Object.isExtensible(person));//false
</script>

运行结果:

JavaScript创建防篡改对象的方法分析

在非严格模式下,为对象添加新成员会静默失败;而在严格模式下,会抛出错误。

虽然对象不能添加新成员,但仍然可以修改和删除已有的成员。而 Object.isExtensible() 可以确定对象是否可扩展。

2 密封的对象

密封的对象不可以扩展,而且已有的成员的[[Configurable]]的特性也被设置为 false,这意味着不能删除这个对象的属性和方法咯,但属性的值可以修改:

<script type="text/javascript">
  var person = {name: "deniro"};
  console.log(Object.isExtensible(person));//true
  console.log(Object.isSealed(person));//false
  Object.seal(person);//密封对象
  console.log(Object.isExtensible(person));//false
  console.log(Object.isSealed(person));//true
  person.age = 29;
  console.log(person.age);//undefined
  delete person.name;
  console.log(person.name);//deniro
</script>

运行结果:

JavaScript创建防篡改对象的方法分析

跟不可扩展对象相似,在非严格模式下,删除对象的已有成员会静默失败;而在严格模式下,会抛出错误。

3 冻结的对象

对象的最严格的防篡改级别是冻结!冻结的对象既不能扩展,又是密封的,而且对象的数据属性[[Writable]]被设置为 false,即属性值无法被修改:

<script type="text/javascript">
  var person = {name: "deniro"};
  console.log(Object.isExtensible(person));//true
  console.log(Object.isSealed(person));//false
  console.log(Object.isFrozen(person));//false
  Object.freeze(person);
  console.log(Object.isExtensible(person));//false
  console.log(Object.isSealed(person));//true
  console.log(Object.isFrozen(person));//trueo
  person.age = 29;
  console.log(person.age);//undefined
  delete person.name;
  console.log(person.name);//deniro
  person.name = "lily";
  console.log(person.name);//deniro
</script>

运行结果:

JavaScript创建防篡改对象的方法分析

对于 JavaScript 第三方库的而言,冻结对象很有用,因为这些库最怕被人意外修改了呀O(∩_∩)O~

感兴趣的朋友还可以使用本站在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行结果。

更多关于JavaScript相关内容还可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
如何将一个String和多个String值进行比较思路分析
Apr 22 Javascript
jQuery ui插件的使用方法代码实例
May 08 Javascript
JS判定是否原生方法
Jul 22 Javascript
javascript实现促销倒计时+fixed固定在底部
Sep 18 Javascript
JS实现为表格动态添加标题的方法
Mar 31 Javascript
JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法
Apr 18 Javascript
jQuery限制图片大小的方法
May 25 Javascript
Bootstrap源码解读模态弹出框(11)
Dec 28 Javascript
vuex的使用及持久化state的方式详解
Jan 23 Javascript
vue获取元素宽、高、距离左边距离,右,上距离等还有XY坐标轴的方法
Sep 05 Javascript
小程序实现悬浮搜索框
Jul 12 Javascript
VUE使用draggable实现组件拖拽
Apr 06 Vue.js
JavaScript事件对象深入详解
Dec 30 #Javascript
JavaScript继承的特性与实践应用深入详解
Dec 30 #Javascript
JavaScript函数的特性与应用实践深入详解
Dec 30 #Javascript
基于Three.js实现360度全景图片
Dec 30 #Javascript
three.js实现圆柱体
Dec 30 #Javascript
three.js实现炫酷的全景3D重力感应
Dec 30 #Javascript
Three.js实现3D机房效果
Dec 30 #Javascript
You might like
php 日期时间处理函数小结
2009/12/18 PHP
php获取数组元素中头一个数组元素值的实现方法
2014/12/20 PHP
php函数重载的替代方法--伪重载详解
2015/05/08 PHP
php mysql_list_dbs()函数用法示例
2017/03/29 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
个人总结的一些关于String、Function、Array的属性和用法
2007/01/10 Javascript
常用的javascript function代码
2008/05/23 Javascript
JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性
2012/10/11 Javascript
使用jQuery实现更改默认alert框体
2015/04/13 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
Seajs是什么及sea.js 由来,特点以及优势
2016/10/13 Javascript
js表单登陆验证示例
2016/10/19 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
2016/11/09 Javascript
JS控制TreeView的结点选择
2016/11/11 Javascript
JavaScript 动态三角函数实例详解
2017/01/08 Javascript
移动端界面的适配
2017/01/11 Javascript
js实现带进度条提示的多视频上传功能
2020/12/13 Javascript
Angular4 ElementRef的应用
2018/02/26 Javascript
详解Vue Elememt-UI构建管理后台
2018/02/27 Javascript
页面点击小红心js实现代码
2018/05/26 Javascript
利用angular自动编译andriod APK的绕坑经历分享
2019/03/08 Javascript
jQuery事件blur()方法的使用实例讲解
2019/03/30 jQuery
Vue开发环境中修改端口号的实现方法
2019/08/15 Javascript
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
用python处理图片实现图像中的像素访问
2018/05/04 Python
3个用于数据科学的顶级Python库
2018/09/29 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
2018/12/28 Python
Python 监测文件是否更新的方法
2019/06/10 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
免费获得微软MCSD证书赶快行动吧!
2012/11/13 HTML / CSS
意大利制造的男鞋和女鞋:SCAROSSO
2018/03/07 全球购物
Harrods美国:英国最大的百货公司
2018/11/04 全球购物
开会迟到检讨书
2014/01/08 职场文书
敬老院院长事迹材料
2014/05/21 职场文书
优秀少先队辅导员事迹材料
2014/12/24 职场文书
思想品德评语大全
2014/12/31 职场文书