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 相关文章推荐
jquery 选项卡效果 新手代码
Jul 08 Javascript
js验证输入是否为手机号码或电话号码示例
Dec 30 Javascript
基于javascript实现右下角浮动广告效果
Jan 08 Javascript
理解javascript封装
Feb 23 Javascript
原生JS实现匀速图片轮播动画
Oct 18 Javascript
jQuery特殊符号转义的实现
Nov 30 Javascript
原生JavaScript实现的简单省市县三级联动功能示例
May 27 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
Aug 17 Javascript
监听element-ui table滚动事件的方法
Mar 26 Javascript
详解Vue.js中引入图片路径的几种方式
Jun 17 Javascript
javascript浅层克隆、深度克隆对比及实例解析
Feb 09 Javascript
vue 通过绑定事件获取当前行的id操作
Jul 27 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自动识别文件编码并转换为UTF-8的方法
2014/06/12 PHP
Laravel中使用FormRequest进行表单验证方法及问题汇总
2016/06/19 PHP
一个简单安全的PHP验证码类、PHP验证码
2016/09/24 PHP
Yii框架中sphinx索引配置方法解析
2016/10/18 PHP
JQuery的一些小应用收集
2010/03/27 Javascript
模拟jQuery ajax服务器端与客户端通信的代码
2011/03/28 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
基于javascript制作微博发布栏效果
2016/04/04 Javascript
Angularjs2不同组件间的通信实例代码
2017/05/06 Javascript
解决BootStrap Fileinput手机图片上传显示旋转问题
2017/06/01 Javascript
极简主义法编写JavaScript类
2017/11/02 Javascript
node中的cookie的具体使用
2018/09/13 Javascript
vue 项目中当访问路由不存在的时候默认访问404页面操作
2020/08/31 Javascript
JavaScript实现手风琴效果
2021/02/18 Javascript
[03:51]吞吞映像 每周精彩击杀top10第二弹
2014/06/25 DOTA
Python中字符编码简介、方法及使用建议
2015/01/08 Python
Python实现基于C/S架构的聊天室功能详解
2018/07/07 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
Python终端输出彩色字符方法详解
2020/02/11 Python
python等差数列求和公式前 100 项的和实例
2020/02/25 Python
Keras实现DenseNet结构操作
2020/07/06 Python
python实现自动打卡的示例代码
2020/10/10 Python
戴尔英国官网:Dell英国
2017/05/27 全球购物
夏威夷灵感服装及配饰:Reyn Spooner
2018/09/18 全球购物
C语言中一个结构不能包含指向自己的指针吗
2012/05/25 面试题
创业计划书中要认真思考的问题
2013/12/28 职场文书
房地产融资计划书
2014/01/10 职场文书
军训考核自我鉴定
2014/02/13 职场文书
征婚广告词
2014/03/17 职场文书
2014年教研室工作总结
2014/12/06 职场文书
2015年个人实习工作总结
2015/05/28 职场文书
幼儿园庆六一主持词
2015/06/30 职场文书
关于运动会的广播稿
2015/08/19 职场文书
环保建议书作文400字
2015/09/14 职场文书
大学军训口号大全
2015/12/24 职场文书
Python基础之元类详解
2021/04/29 Python