javascript防篡改对象实例详解


Posted in Javascript onApril 10, 2017

本文实例讲述了javascript防篡改对象。分享给大家供大家参考,具体如下:

JavaScript中对象内置有多个属性Configurable,Writable,Enumerable,Value,Get和Set,来控制属性的行为。同样的ES5也有几个方法,来指定对象的行为。我们知道,javascript中的对象是可以共享的,也是默认可拓展的:

//一旦将对象设置防篡改,就不能撤销了
//众所周知,一般的对象是可以随意拓展的
var person = {name:'liufang'};
person.age = 22;
document.write(person.age+"<br>");//22

我们可以添加、删除或者修改其他的属性或者方法。但是这也会导致一些问题,比如多人开发时,某些属性被人为修改,造成工程上的麻烦。这就促使了防篡改对象的诞生。防篡改对象有三个级别,分别是不可拓展对象、密封对象和冻结对象。

不可拓展对象

先来说说不可拓展对象吧,可以通过就普通对象设置为不可拓展对象,来使新添加的属性无效:

//防拓展对象
Object.preventExtensions(person);//设置为防拓展对象
person.smallName = 'ff';
document.write(person.smallName+"<br>");//undefined
//说明不能添加新属性
//检测是否为可拓展对象
document.write(Object.isExtensible(person)+"<br>");//false
//虽然防拓展对象不能添加属性,但是可以删除属性
delete person.age;
document.write(person.age+"<br>");//undefined ,已经删除成功

可以看到,虽然不可拓展对象可以防止新添加属性,却不能阻止他人删除属性,当然也不能阻止修改了。所以引出了第二个等级的密封对象。

密封对象

密封对象就是在不可拓展对象的基础上添加一条规则,也就是不能删除属性。

//密封对象
//在不可拓展的基础上也不能删除
var people = {name:'liufang'};
Object.seal(people);//将对象密封
delete people.name;
document.write(people.name+"<br>");//liufang ,说明不能删除
people.name = "tyq";//虽然不能删除,但是可以修改
document.write(people.name+"<br>");//tyq ,说明修改成功
//检测
document.write(Object.isSealed(people)+"<br>");//true

可以看出,密封对象虽然防止了删除,但是还是无法阻止修改,所以就有了最高级别的限制,也就是冻结对象。

冻结对象

被冻结的对象既不能拓展,也不能删除和修改。

//冻结对象
//不能拓展,不能删除,不能修改
var man = {name:'tyq'};
Object.freeze(man);
//检测
document.write(Object.isFrozen(man));//true

最后要注意的就是,一旦对象被设置放篡改对象,则不能撤销,所以需要慎重考虑。

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript中json操作技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript动画特效与技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

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

Javascript 相关文章推荐
JQuery困惑—包装集 DOM节点
Oct 16 Javascript
jQuery+CSS 实现随滚动条增减的汽水瓶中的液体效果
Sep 26 Javascript
鼠标移入移出事件改变图片的分辨率的两种方法
Dec 17 Javascript
Javascript中的默认参数详解
Oct 22 Javascript
javascript针对不确定函数的执行方法
Dec 16 Javascript
JavaScript中循环遍历Array与Map的方法小结
Mar 12 Javascript
jQuery根据ID、CLASS、等获取对象的实例
Dec 04 Javascript
js仿搜狐视频记录片列表展示效果
May 30 Javascript
详解如何使用webpack打包JS
Jun 21 Javascript
浅谈JavaScript 代码整洁之道
Oct 23 Javascript
基于JavaScript实现十五拼图代码实例
Apr 26 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
Jun 28 Javascript
jQuery EasyUI之验证框validatebox实例详解
Apr 10 #jQuery
ES6教程之for循环和Map,Set用法分析
Apr 10 #Javascript
javascript实现动态显示颜色块的报表效果
Apr 10 #Javascript
bootstrap如何让dropdown menu按钮式下拉框长度一致
Apr 10 #Javascript
ES6生成器用法实例分析
Apr 10 #Javascript
基于javascript的异步编程实例详解
Apr 10 #Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
Apr 10 #Javascript
You might like
ubuntu 编译安装php 5.3.3+memcache的方法
2010/08/05 PHP
php 文件缓存函数
2011/10/08 PHP
mantis安装、配置和使用中的问题小结
2014/07/14 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
2016/01/19 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
Ajax+PHP实现的删除数据功能示例
2019/02/12 PHP
一文看懂PHP进程管理器php-fpm
2020/06/01 PHP
Javascript 函数对象的多重身份
2009/06/28 Javascript
javascript的数据类型、字面量、变量介绍
2012/05/23 Javascript
自定义的一个简单时尚js下拉选择框
2013/11/20 Javascript
javascript实现淘宝幻灯片广告展示效果
2015/04/27 Javascript
JavaScript实现图片轮播的方法
2015/07/31 Javascript
JavaScript仿flash遮罩动画效果
2016/06/15 Javascript
jquery实现瀑布流效果 jquery下拉加载新数据
2016/12/12 Javascript
轻松实现jQuery添加删除按钮Click事件
2017/03/13 Javascript
在ABP框架中使用BootstrapTable组件的方法
2017/07/31 Javascript
使用JavaScript实现表格编辑器(实例讲解)
2017/08/02 Javascript
JavaScript 点击触发复制功能实例详解
2018/11/02 Javascript
js中null与空字符串&quot;&quot;的区别讲解
2019/01/17 Javascript
简单解决Python文件中文编码问题
2015/11/22 Python
python 网络编程常用代码段
2016/08/28 Python
使用Python对Csv文件操作实例代码
2017/05/12 Python
python numpy和list查询其中某个数的个数及定位方法
2018/06/27 Python
Python+OpenCV图片局部区域像素值处理详解
2019/01/23 Python
Python实现中值滤波去噪方式
2019/12/18 Python
python pptx复制指定页的ppt教程
2020/02/14 Python
解决Python pip 自动更新升级失败的问题
2020/02/21 Python
浅谈Python线程的同步互斥与死锁
2020/03/22 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
2020/06/18 Python
python制作一个简单的gui 数据库查询界面
2020/11/19 Python
CSS3 border-radius圆角的实现方法及用法详解
2020/09/14 HTML / CSS
如何编写优秀的食品项目创业计划书
2014/01/23 职场文书
禁毒宣传工作方案
2014/05/23 职场文书
国家助学贷款承诺书
2015/04/30 职场文书
2019数学教师下学期工作总结
2019/06/27 职场文书
NodeJs使用webpack打包项目的方法详解
2022/02/28 NodeJs