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
    这个方法是对象上最高级别的不可变性,它会禁止对于对象本身及其任意直接属性的修改,
  • 相关阅读:
    cogs 826. Feb11] GF打dota
    cogs 133. [USACO Mar08] 牛跑步 A*k短路算法
    luogu cogs 1437. [NOIP2013]转圈游戏
    RESTful
    中间件
    回顾基础知识,类,fbv,cbv
    Vue
    ES6的一些说明
    小试牛刀2
    小试牛刀
  • 原文地址:https://www.cnblogs.com/wzndkj/p/12556576.html
Copyright © 2011-2022 走看看