1. obj1 = {
  2.   internal: {}
  3. };
  4.  
  5. Object.freeze(obj1);
  6. obj1.internal.= 'aValue';
  7.  
  8. obj1.internal.// 'aValue'
  9.  
  10. // To make obj fully immutable, freeze each object in obj.
  11. // To do so, we use this function.
  12. function deepFreeze(obj) {
  13.  
  14.   // Retrieve the property names defined on obj
  15.   var propNames = Object.getOwnPropertyNames(obj);
  16.  
  17.   // Freeze properties before freezing self
  18.   propNames.forEach(function(name) {
  19.     var prop = obj[name];
  20.  
  21.     // Freeze prop if it is an object
  22.     if (typeof prop == 'object' && prop !== null)
  23.       deepFreeze(prop);
  24.   });
  25.  
  26.   // Freeze self (no-op if already frozen)
  27.   return Object.freeze(obj);
  28. }
  29.  
  30. obj2 = {
  31.   internal: {}
  32. };
  33.  
  34. deepFreeze(obj2);
  35. obj2.internal.= 'anotherValue';
  36. obj2.internal.a; // undefined

deepFreeze的更多相关文章

  1. 浅解析js中的对象

    浅解析js中的对象 原文网址:http://www.cnblogs.com/foodoir/p/5971686.html,转载请注明出处. 前面的话: 说到对象,我首先想到的是每到过年过节见长辈的时候 ...

  2. My ECMAScript 7 wishlist

    With ECMAScript 6 now feature complete, any further changes to the core of JavaScript will happen in ...

  3. [Redux] Reducer Composition with Arrays

    In the previous lesson we created a reducer that can handle two actions, adding a new to-do, and tog ...

  4. [Redux] Writing a Todo List Reducer (Toggling a Todo)

    Learn how to implement toggling a todo in a todo list application reducer. let todo = (state = [], a ...

  5. [Redux] Writing a Todo List Reducer (Adding a Todo)

    Learn how to implement adding a todo in a todo list application reducer. let todo = (state = [], act ...

  6. [Redux] Avoiding Object Mutations with Object.assign() and ...spread

    Learn how to use Object.assign() and the spread operator proposed for ES7 to avoid mutating objects. ...

  7. [Redux] Avoiding Array Mutations with concat(), slice(), and ...spread

    For Redux, you cannot use mutable methods like push, splice. Need to use immutable methods such as c ...

  8. javascript EcmaScript5 新增对象之Object.freeze

    我们都知道在js里对象是很容易改变的 var obj1 ={ a:'111' } obj1.a = '222'; console.log( obj.a ) //output 222 对象的属性发生了变 ...

  9. (74)Wangdao.com第十三天_Object 对象_属性描述对象

    Object 对象 JavaScript 原生提供 Object 对象 JavaScript 的所有其他对象都继承自  Object 对象,即那些对象都是Object的实例 Object 对象的原生方 ...

随机推荐

  1. php使用Socket实现聊天室功能(书中的代码)

    这只是一种技术 <?php $host = "127.0.0.1"; // 指定监听的端口,注意该端口不能与现有应用的端口冲突 $port = '9505'; $null = ...

  2. 谈谈CS英文论文写作

    作为一个CS的研究生,发篇文章是你毕业的必要条件.现如今,学校对于文章的要求也越来越高,一般来说,还是国外的期刊或者会议更加受到认可,这样对于毕业也有好处.因此,以我自己的感受来说,论文的写作以及表达 ...

  3. vue 中使用class(样式)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. eclipse codeFormatter 和 codeTemplates 模板

    下载  eclipse_modles.rar 好用高效的eclipse的注释和代码风格模板.     版权声明:本文为博主原创文章,未经博主允许不得转载.

  5. android中两个不同名称的app不能同时安装

    ---恢复内容开始--- 两个app,第一个安装后,再安装第二个,会提示安装包损坏或者一切其他问题,但是这个安装包在别的手机可以正常安装,可以是因为以下问题 两个app中,包含有相同名称的provid ...

  6. Linux--shell交互输入与循环语句--06

    一.交互输入 1.命令用法:read a b c   -> aa bb cc read命令同时可以定义多个变量值:而输入的内容默认以空格为分隔符,将值输入到对应的变量中:如果默认值输入过多,最后 ...

  7. Taro -- 微信小程序密码弹窗

    记录一个类似支付密码的弹窗写法,实现是否免密功能.如图: index.js   import Taro, { Component } from '@tarojs/taro'   import { Vi ...

  8. 部署Tomcat服务器

    部署Tomcat服务器,具体内容如下: 1.安装部署JDK基础环境; 2.安装部署Tomcat服务器; 3.创建JSP测试页面,文件名为test.jsp,显示服务器当前时间. 然后客户机访问Web服务 ...

  9. Oracle package demo 包

    1.package 程序包说明(由函数.过程.变量.常量.游标和异常组成) create or replace package pk_test is -- Author : CHEN -- Creat ...

  10. .iml文件恢复

    基于maven的java工程 执行 mvn idea:module可恢复.iml文件