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

    JavaScript多人开发协作过程中,很可能会意外篡改他人代码。防篡改对象,通过不可扩展、密封、冻结来解决这个问题。

    需要特别注意的是:一旦把对象定义为防篡改,就无法撤销了。

    1、不可扩展对象

    1 var person = {
    2     name: "Person Name"
    3 }
    4 Object.preventExtensions(person);
    5 
    6 person.age = 29;
    7 alert(person.age);  // undefined

    通过 Object.isExtensible([Object]) 可以确定对象是否可以扩展。 true 可以扩展, false 不可以扩展。

    不可扩展的对象,不能新增属性。

    2、密封的对象

     1 var person = {
     2     name: "Person Name"
     3 }
     4 Object.seal(person);
     5 
     6 person.age = 29;
     7 alert(person.age); // undefined
     8 
     9 delete person.name;
    10 alert(person.name); // Person Name

    通过 Object.isSealed([Object]) 可以确定对象是否被密封了。

    被密封的对方,不能新增属性,也不能删除属性。

    3、冻结的对象

     1 var person = {
     2     name: "Person Name"
     3 }
     4 Object.freeze(person);
     5 
     6 person.age = 29;
     7 alert(person.age); // undefined
     8 
     9 delete person.name;
    10 alert(person.name); // Person Name
    11 
    12 person.name = "New Name";
    13 alert(person.name); // Person Name

    通过 Object.isFrozen([Object]) 来检测对象是否被冻结。

    被冻结的对象,不能新增属性,并不能删除属性,也不能修改属性。

    4、总结

    冻结 > 密封 > 不可扩展

     
    不可扩展 ✖️ ✔️ ✔️
    密封 ✖️ ✖️ ✔️
    冻结 ✖️ ✖️ ✖️
  • 相关阅读:
    LinkedBlockingQueue
    PriorityBlockingQueue
    js阻止事件冒泡
    java map常用的4种遍历方法
    JAVA jar 和 war 包的区别
    jquery 操作大全
    Java 使用new Thread和线程池的区别
    原生XMLHttpRequest
    socket 和 webscoket 的区别
    GET和POST请求的区别如下
  • 原文地址:https://www.cnblogs.com/tinyTea/p/11114034.html
Copyright © 2011-2022 走看看