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 相关文章推荐
Google排名中的10个最著名的 JavaScript库
Apr 27 Javascript
js取得html iframe中的元素和变量值
Jun 30 Javascript
jquery实现叠层3D文字特效代码分享
Aug 21 Javascript
JavaScript实现标题栏文字轮播效果代码
Oct 24 Javascript
js下将金额数字每三位一逗号分隔
Feb 19 Javascript
jQuery中使用animate自定义动画的方法
May 29 Javascript
Vue.set()实现数据动态响应的方法
Feb 07 Javascript
手写简单的jQuery雪花飘落效果实例
Apr 22 jQuery
详解angular脏检查原理及伪代码实现
Jun 08 Javascript
Vue使用Proxy监听所有接口状态的方法实现
Jun 07 Javascript
微信小程序如何自定义table组件
Jun 29 Javascript
vue@cli3项目模板怎么使用public目录下的静态文件
Jul 07 Javascript
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 array 的加法操作代码
2010/07/24 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
2014/02/13 PHP
PHP中ltrim()函数的用法与实例讲解
2019/03/28 PHP
基于PHP+Jquery制作的可编辑的表格的代码
2011/04/10 Javascript
得到form下的所有的input的js代码
2013/11/07 Javascript
一个判断抢购时间是否到达的简单的js函数
2014/06/23 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
鼠标悬浮显示二级菜单效果的jquery实现
2014/10/29 Javascript
JavaScript的设计模式经典之代理模式
2016/02/24 Javascript
jQuery的图片轮播插件PgwSlideshow使用详解
2016/08/11 Javascript
在vue中,v-for的索引index在html中的使用方法
2018/03/06 Javascript
解决Mac下安装nmp的淘宝镜像失败问题
2018/05/16 Javascript
Vue引入sass并配置全局变量的方法
2018/06/27 Javascript
Jquery获取radio选中值实例总结
2019/01/17 jQuery
MockJs结合json-server模拟后台数据
2020/08/26 Javascript
用JS实现一个简单的打砖块游戏
2019/12/11 Javascript
JS面试题中深拷贝的实现讲解
2020/05/07 Javascript
简单的通用表达式求10乘阶示例
2014/03/03 Python
python开发环境PyScripter中文乱码问题解决方案
2016/09/11 Python
对Python之gzip文件读写的方法详解
2019/02/08 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
Python批量修改图片分辨率的实例代码
2019/07/04 Python
pycharm修改文件的默认打开方式的步骤
2019/07/29 Python
使用Python自动生成HTML的方法示例
2019/08/06 Python
复化梯形求积分实例——用Python进行数值计算
2019/11/20 Python
Python3.7+tkinter实现查询界面功能
2019/12/24 Python
Python-opencv 双线性插值实例
2020/01/17 Python
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
.NET笔试题(20个问题)
2016/02/02 面试题
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
销售人员中英文自荐信
2013/09/22 职场文书
销售人员获奖感言
2014/02/05 职场文书
关于环保的建议书400字
2014/03/12 职场文书
婚前协议书怎么写
2014/04/15 职场文书
2014银行领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
小学教师教育随笔
2015/08/14 职场文书