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 相关文章推荐
Gird组件 Part-3:范例RSSFeed Viewer
Mar 10 Javascript
js获取html参数及向swf传递参数应用介绍
Feb 18 Javascript
深入浅析AngularJS中的module(模块)
Jan 04 Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
Jan 05 Javascript
jQuery ajax MD5实现用户注册即时验证功能
Oct 11 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
Jan 03 Javascript
详解Angular4中路由Router类的跳转navigate
Jun 09 Javascript
Vue中定义全局变量与常量的各种方式详解
Aug 23 Javascript
vue.js整合mint-ui里的轮播图实例代码
Dec 27 Javascript
vue中简单弹框dialog的实现方法
Feb 26 Javascript
js实现简单贪吃蛇游戏
May 15 Javascript
jQuery实现tab栏切换效果
Dec 22 jQuery
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上传文件时自动分配路径的方法
2015/01/09 PHP
将FCKeditor导入PHP+SMARTY的实现方法
2015/01/15 PHP
php获取微信基础接口凭证Access_token
2018/08/23 PHP
Prototype使用指南之hash.js
2007/01/10 Javascript
Javascript &amp; DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
2007/06/02 Javascript
JavaScript中的一些定位属性[图解]
2010/07/14 Javascript
图片轮换效果实现代码(点击按钮停止执行)
2013/04/12 Javascript
使用javascript创建快捷方式的简单实例
2013/08/09 Javascript
使用firebug进行调试javascript的示例
2013/12/16 Javascript
制作jquery遮罩层效果导航菜单代码分享
2013/12/25 Javascript
checkbox全选所涉及到的知识点介绍
2013/12/31 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
javascript实现无缝上下滚动特效
2015/12/16 Javascript
浅谈js在html中的加载执行顺序,多个jquery ready执行顺序
2016/11/26 Javascript
从零学习node.js之模块规范(一)
2017/02/21 Javascript
JavaScript动态绑定详解
2017/09/14 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
2018/09/04 Javascript
玩转vue的slot内容分发
2018/09/22 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
2018/09/26 Javascript
24个ES6方法解决JS实际开发问题(小结)
2020/05/31 Javascript
详解vue中v-model和v-bind绑定数据的异同
2020/08/10 Javascript
[02:19]DOTA2女子战队FOX视频专访:希望更多美眉一起加入
2013/10/15 DOTA
Python实现的二维码生成小软件
2014/07/11 Python
Python实现决策树C4.5算法的示例
2018/05/30 Python
python time.sleep()是睡眠线程还是进程
2019/07/09 Python
python将音频进行变速的操作方法
2020/04/08 Python
基于python调用jenkins-cli实现快速发布
2020/08/14 Python
pycharm 如何取消连按两下shift出现的全局搜索
2021/01/15 Python
html+css实现自定义图片上传按钮功能
2019/09/04 HTML / CSS
优秀管理者事迹材料
2014/05/22 职场文书
甲乙双方合作协议书
2014/10/13 职场文书
2014年高中教师工作总结
2014/12/19 职场文书
争先创优个人总结
2015/03/04 职场文书
导游词之天津盘山
2019/11/01 职场文书
pytorch Dropout过拟合的操作
2021/05/27 Python
Linux服务器离线安装 nginx的详细步骤
2022/06/16 Servers