zoukankan      html  css  js  c++  java
  • JavaScript中的防篡改对象

    由于JavaScript共享的特性,任何对象都可以被放在同一环境下运行的代码修改。
    例如:
    var person = {name:"caibin'}
    person.age = 21;
    即使第一行定义了完整的person对象,那么第二行代码仍然可以对其添加属性,删除属性等。
    我们有三个方法可以防止你做出这些行为。

    一、不可扩展对象:
    先来看person本身的扩展性:
    Object.isExtensible(person); // true

    接下来执行:
    Object.preventExtensions(person);
    Object.isExtensible(person) ;// false
    person.age = 29;
    console.log(person.age) ;//undefined

    默认情况下,person.age = 29会静默失败,严格模式下,会报错。
    然后,我们可以修改之前已经存在的person的属性。
    例如:
    person.name = "cb"; 
    console.log(person.name); // cb

    甚至可以删除:
    delete person.name; // true;
    console.log(person) ; // {}

    小结:当对象被设置为不可扩展之后,不可以增加属性,但是可以修改,删除原来存在的属性。

    二、密封的对象:
    密封对象意味着:不可扩展,不能删除属性和方法,但是属性值是可以修改的。
    先来看默认的对象的密封性和扩展性:
    var caibin = {name:"caibin"};
    console.log(Object.isSealed(caibin)); // false;
    console.log(Object.isExtensible(caibin)); // true

    接下来,执行密封操作:
    Object.seal(caibin);

    然后,检查扩展性:
    console.log(Object.isExtensible(caibin)); // false 不可扩展
    caibin.age = 21;
    console.log(caibin.age) ;// undefined

    删除属性:
    delete caibin.name; // false; 删除失败
    console.log(caibin.name) ;// caibin

    修改属性:
    caibin.name = "cb";
    console.log(caibin.name);//cb 修改成功

    三、冻结的对象:
    这是最严格的防篡改级别,冻结的对象即不可扩展,又是密封的,对象的数据属性Writable被设置成false,这意味着不能修改属性的值。
    先看对象默认的密封性,扩展性,冻结性:
    var cb = {name:"caibin"}
    console.log(Object.isExtensible(cb)) ;// true;
    console.log(Object.isSealed(cb)) ;// false
    console.log(Object.isFrozen(cb)); // false

    然后,执行冻结操作:
    Object.freeze(cb);

    查看扩展性:
    console.log(Object.isExtensible(cb)); // false
    cb.age = 21;
    console.log(cb.age); // undefined

    查看密封性:
    console.log(Object.isSealed(cb)); // true;
    delete cb.name ;// false
    console.log(cb.name) ;// caibin

    查看Writable属性:
    cb.name = "cb";
    console.log(cb.name);//caibin 说明Writable属性被设置成false.




  • 相关阅读:
    OO第三次阶段性总结
    OO第二次阶段性总结
    OO第一次阶段性总结
    【软工】提问回顾与个人总结
    【软工】结对编程作业
    【软工】第一次阅读作业
    【软工】第0次个人作业
    oo作业总结(四)
    OO作业总结(三)
    oo作业总结(二)
  • 原文地址:https://www.cnblogs.com/iceseal/p/3879239.html
Copyright © 2011-2022 走看看