这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
这篇文章主要介绍了 javascript 防篡改对象, 结合实例形式分析了防篡改对象的三个级别与具体使用技巧, 需要的朋友可以参考下
本文实例讲述了 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 程序设计有所帮助。
来源: http://www.phperz.com/article/17/0523/334178.html