zoukankan      html  css  js  c++  java
  • 你不知道的JS系列 ( 35 ) - 对象不变性

    JS 程序中很少需要深不可变性。有些特殊情况可能需要这样做。如果发现需要密封或者冻结所有的对象,那重新思考一下程序的设计,让它能更好地应对对象值的改变。
    对象常量
    结合 writable: false 和 configurable: false 就可以创建一个真正的常量属性,不可修改,重定义或者删除
    var myObject = {};
    Object.defineProperty(myObject, 'f', {
      value: 42,
      writable: false,
      configurable: false
    })

    禁止扩展

    如果想禁止一个对象添加新属性并且保留已有属性,可以使用 Object.preventExtensions(...)
    var myObject = { a:2 };
    Object.preventExtensions(myObject);
    myObject.b = 3;
    myObject.b; // undefined
    在非严格模式下,创建失败,严格模式下,抛出 TypeError 错误
    密封
    Object.seal(...) = Object.preventExtensions(...) + configurable:false
    密封之后不能添加新属性,也不能重新配置或者删除任何现有属性,虽然可以修改属性的值
    冻结
    Object.freeze(...) = Object.seal(...) + writable:false
    这个方法是对象上最高级别的不可变性,它会禁止对于对象本身及其任意直接属性的修改,
  • 相关阅读:
    Tree Recovery解题报告
    bjtuOJ1019 Robot
    bjtuOJ1137 蚂蚁爬杆
    栈的使用,rails
    重做catch the cow
    C#3.0新特性之匿名类型
    C#Lambda表达式的用法
    C#进程的使用方法详解
    C#进程管理启动和停止
    C#LINQ查询表达式用法
  • 原文地址:https://www.cnblogs.com/wzndkj/p/12556576.html
Copyright © 2011-2022 走看看