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 相关文章推荐
Ext面向对象开发实践(续)
Nov 18 Javascript
JQuery1.4+ Ajax IE8 内存泄漏问题
Oct 15 Javascript
理解Javascript_07_理解instanceof实现原理
Oct 15 Javascript
JS加jquery简单实现标签元素的显示或隐藏
Sep 23 Javascript
原生javascript实现图片弹窗交互效果
Jan 12 Javascript
JavaScript 学习笔记之基础中的基础
Jan 13 Javascript
javascript实时显示当天日期的方法
May 20 Javascript
Jquery代码实现图片轮播效果(一)
Aug 12 Javascript
整理Javascript流程控制语句学习笔记
Nov 29 Javascript
详解利用 Vue.js 实现前后端分离的RBAC角色权限管理
Sep 15 Javascript
vue中使用refs定位dom出现undefined的解决方法
Dec 21 Javascript
es6中reduce的基本使用方法
Sep 10 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
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
2012/07/31 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
2014/09/06 PHP
PHP面向对象之后期静态绑定功能介绍
2015/05/18 PHP
PHP技术开发微信公众平台
2015/07/22 PHP
PHP标准库(PHP SPL)详解
2019/03/16 PHP
jquery插件 cluetip 关键词注释
2010/01/12 Javascript
基于jQuery的弹出框插件
2012/03/18 Javascript
基于jquery实现后台左侧菜单点击上下滑动显示
2013/04/11 Javascript
前端轻量级MVC框架CanJS详解
2014/09/26 Javascript
JavaScript拖拽、碰撞、重力及弹性运动实例分析
2016/01/08 Javascript
JavaScript类型系统之布尔Boolean类型详解
2016/06/26 Javascript
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
2017/04/13 Javascript
vue2.5.2使用http请求获取静态json数据的实例代码
2018/02/27 Javascript
jQuery中each方法的使用详解
2018/03/18 jQuery
JavaScript设计模式之原型模式分析【ES5与ES6】
2018/07/26 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
解决vue更新路由router-view复用组件内容不刷新的问题
2019/11/04 Javascript
vue vant Area组件使用详解
2019/12/09 Javascript
vue v-for出来的列表,点击某个li使得当前被点击的li字体变红操作
2020/07/17 Javascript
Python内置函数bin() oct()等实现进制转换
2012/12/30 Python
Python求两个文本文件以行为单位的交集、并集与差集的方法
2015/06/17 Python
python实现二叉树的遍历
2017/12/11 Python
python检测空间储存剩余大小和指定文件夹内存占用的实例
2018/06/11 Python
Python3.6简单反射操作示例
2018/06/14 Python
Python lambda表达式用法实例分析
2018/12/25 Python
python中设置超时跳过,超时退出的方式
2019/12/13 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
实例讲解利用HTML5 Canvas API操作图形旋转的方法
2016/03/22 HTML / CSS
Russell Stover巧克力官方网站:美国领先的精美巧克力制造商
2016/11/27 全球购物
英国领先的瓷砖专家:Walls and Floors
2018/04/27 全球购物
函授本科自我鉴定
2014/02/04 职场文书
销售团队口号大全
2014/06/06 职场文书
员工辞职信怎么写
2015/02/27 职场文书
师德师风主题教育活动总结
2015/05/07 职场文书
frg-100简单操作(设置)说明
2022/04/05 无线电