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 相关文章推荐
JS模拟面向对象全解(一、类型及传递)
Jul 13 Javascript
如何将网页表格内容导入excel
Feb 18 Javascript
javascript实现根据身份证号读取相关信息
Dec 17 Javascript
jquery中EasyUI实现同步树
Mar 01 Javascript
JS验证图片格式和大小并预览的简单实例
Oct 11 Javascript
微信小程序使用navigateTo数据传递的实例
Sep 26 Javascript
微信小程序websocket实现即时聊天功能
May 21 Javascript
JavaScript计算正方形面积
Nov 26 Javascript
JavaScript canvas绘制圆弧与圆形
Feb 18 Javascript
js实现网页版贪吃蛇游戏
Feb 22 Javascript
Vue组件间数据传递的方式(3种)
Jul 13 Javascript
vue二选一tab栏切换新做法实现
Jan 19 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中实现图片的锐化
2006/10/09 PHP
慎用preg_replace危险的/e修饰符(一句话后门常用)
2013/06/19 PHP
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
PHP PDO操作MySQL基础教程
2017/06/05 PHP
在Laravel中使用MongoDB的方法示例
2019/11/11 PHP
jQuery插件开发基础简单介绍
2013/01/07 Javascript
用js将内容复制到剪贴板兼容浏览器
2014/03/18 Javascript
javascript数组操作(创建、元素删除、数组的拷贝)
2014/04/07 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
JavaScript学习笔记之Function对象
2015/01/22 Javascript
jQuery中常用动画效果函数(日常整理)
2016/09/17 Javascript
移动开发之自适应手机屏幕宽度
2016/11/23 Javascript
Angular.js实现注册系统的实例详解
2016/12/18 Javascript
vue使用nprogress加载路由进度条的方法
2020/06/04 Javascript
JS实现数据动态渲染的竖向步骤条
2020/06/24 Javascript
[04:36]DOTA2国际邀请赛 ti3精彩集锦
2013/08/19 DOTA
python编程-将Python程序转化为可执行程序[整理]
2007/04/09 Python
浅谈Python的Django框架中的缓存控制
2015/07/24 Python
python批量实现Word文件转换为PDF文件
2018/03/15 Python
Python基于百度AI的文字识别的示例
2018/04/21 Python
Python实现一个简单的递归下降分析器
2020/08/01 Python
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
成教毕业生自我鉴定
2013/10/23 职场文书
安全资金保障制度
2014/01/23 职场文书
车队司机自我鉴定
2014/03/02 职场文书
教师产假请假条范文
2014/04/10 职场文书
防邪知识进家庭活动方案
2014/08/26 职场文书
热情服务标语
2014/10/07 职场文书
计生个人工作总结
2015/02/28 职场文书
工作会议通知
2015/04/15 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
python OpenCV学习笔记
2021/03/31 Python
Python 发送SMTP邮件的简单教程
2021/06/24 Python
常用的文件对应的MIME类型汇总
2022/04/26 HTML / CSS
Android开发EditText禁止输入监听及InputFilter字符过滤
2022/06/10 Java/Android