• 防篡改对象


    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、总结

    冻结 > 密封 > 不可扩展

     
    不可扩展 ✖️ ✔️ ✔️
    密封 ✖️ ✖️ ✔️
    冻结 ✖️ ✖️ ✖️
  • 相关阅读:
    Rocket core checkExceptions
    Rocket core ImmGen
    Rocket core RegFile
    Linux 运行 jar 包命令
    怎么在java中杀死正在运行的线程?
    通过实现Runnable接口实现多线程
    解决:Mybatis中parameterType为string传参问题
    解决:Unexpected error occurred in scheduled task
    匹配模块
    办公工具学习
  • 原文地址:https://www.cnblogs.com/tinyTea/p/11114034.html
Copyright © 2020-2023  润新知