1、javascript 浅冻结

var obj = {prop: function() {},foo: 'bar'
};// 新的属性会被添加, 已存在的属性可能
// 会被修改或移除
obj.foo = 'baz';
obj.lumpy = 'woof';
delete obj.prop;// 作为参数传递的对象与返回的对象都被冻结
// 所以不必保存返回的对象(因为两个对象全等)
var o = Object.freeze(obj);o === obj; // true
Object.isFrozen(obj); // === true// 现在任何改变都会失效
obj.foo = 'quux'; // 静默地不做任何事
// 静默地不添加此属性
obj.quaxxor = 'the friendly duck';

2、JavaScript 深冻结

function deepFreeze(obj) {// 取回定义在obj上的属性名var propNames = Object.getOwnPropertyNames(obj);// 在冻结自身之前冻结属性propNames.forEach(function(name) {var prop = obj[name];// 如果prop是个对象,冻结它if (typeof prop == 'object' && prop !== null)deepFreeze(prop);});// 冻结自身(no-op if already frozen)return Object.freeze(obj);
}

解冻

在浏览器规范中这个是不可逆的。
但是有一些小技巧可以实现类似的效果

 Object.unfreeze=function(o){var oo=undefined;if( o instanceof Array){oo=[];var clone=function(v){oo.push(v)};o.forEach(clone); }else if(o instanceof String){oo=new String(o).toString();}else  if(typeof o =='object'){oo={};for (var property in o){oo[property] = o[property];}}return oo;}

javascript 浅冻结、深冻结与解冻相关推荐

  1. 如何在 JS 中“深冻结”对象?

    1.如果咱们想要确保对象被深冻结,就必须创建一个递归函数来冻结对象类型的每个属性: 2.没有深冻结 > let person = { >     name: "Leonardo& ...

  2. JavaScript中函数作用域之精辟,函数原理的浅入深出,及程序执行预编译之通天编译???

    1.程序执行的前一刻会先将代码预编译一遍,如果有语法错误则直接终止程序运行 //预编译之通天编译 --> 在执行的前一刻,会把文件通天扫描一遍 /** //预编译 函数整体提升(即函数会放到程序 ...

  3. Angular浅入深出系列 - 写在前面

    本系列目录: 写在前面 基础知识 控制器(Controller) 作用域(Scope) 集合(Collection) 模块(Module) 依赖注入(Dependency Injection) 服务( ...

  4. 由浅到深了解工厂模式

    作者 点先生 日期 2018.9.26 唠个嗑 先给各位观众老爷道个歉,在上一篇文章的末尾本来说了这次要给大家分享代理模式,但是臣妾,做不到啊! 最近公司给我了一个新项目,于是比较忙一点,再加上代理模 ...

  5. 前端div里的内容下沉_自学Web前端的五个不同阶段,从浅入深

    1.学习HTML,这是最简单,最基本的是要掌握div,formtable.Ulli.P.跨度.字体这些标签,这些都是最常用的,尤其是DIV和表格,DIV,表也可以用于布局,但不灵活,和用于基本表处理数 ...

  6. 由浅至深,谈谈.NET混淆原理 -- 五(MaxtoCode原理),六(其它保护方法)

    新一代NET代码保护工具 MaxtoCode 的原理简介 MaxtoCode作为新一代保护工具,他有绝对优于目前所有NET代码保护工具的强度,是目前最保护强度最高的解决方案.但它也有缺点,最大的缺点即 ...

  7. 浅入深出之Java集合框架(上)

    Java中的集合框架(上) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到浅入深出之Java集合框架(下). ...

  8. 浅入深出之Java集合框架(中)

    Java中的集合框架(中) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到浅入深出之Java集合框架(下). ...

  9. javafx由浅到深的 认识(一)

    javafx是一款比较新兴的语言框架,随着javafx越来越实用,估计许多程序员也会慢慢接触它,故我在这里对它由浅到深进行介绍一下. 首先,要了解javafx,就应该先知道.xml文件的布局软件,以往 ...

最新文章

  1. 记录理解程度、一篇至少读3遍,吴恩达建议这样读论文!
  2. 一文详解毫米波雷达基本技术与应用
  3. 外键为主键可以重复原因
  4. 18行代码AC_Wet Shark and Bishops CodeForces - 621B(数学推导+映射)
  5. SAP Cloud for Customer移动端应用SAP推荐的网络时延参数
  6. Nest入门教程 - 初识Providers
  7. fate框架找不到 flow 命令
  8. 小心SAP环境中的8大安全错误!快来对照、改正!
  9. 卧槽!jmeter 竟然这么牛逼,压测爽歪歪~
  10. 《JAVA程序设计基础(第3版)实验指导》pdf 附下载链接
  11. 天翼云联手平凯星辰共建开源分布式数据库实验室
  12. 生日蛋糕(noi99)
  13. python三年a班的成绩_Python题集:2019春Python程序设计选修课习题笔记
  14. 怎么访问到别人的电脑?
  15. 如何绕过校园网验证,在宿舍免费上办公区的网,享受不拥挤的网络
  16. php丢失msvcr110.dll,Win7电脑丢失Msvcr110.dll的解决方法
  17. Jirafeau一键式文件共享软件安装教程
  18. explained variance
  19. 城堡游戏 java
  20. linux系统tick维护,Linux时间子系统之(十二):periodic tick

热门文章

  1. MacOS 开发 - FSEventStream(文件系统改变事件监控)
  2. 了解公司企业Advance Metering
  3. python 全栈开发,Day32(知识回顾,网络编程基础)
  4. 疯狂动物城简介第一台通用计算机,疯狂动物城
  5. Eclipse修改项目名
  6. wps 成功打开示例WPS_GEOG_LOW_RES
  7. Python 爬虫逆向破解案例实战 (三):凡科网逆向之闭包技巧
  8. Tensorflow深度学习实战之(七)--MP神经元与BP神经网络模型
  9. 妇女节 | 卓然而立,绽放光芒!
  10. html th样式设置,为什么tabletrth等设置样式无效?