递归方法实现完全冻结对象

news/2024/7/10 22:39:54 标签: javascript, js, es6

递归方法实现完全冻结对象

递归算法(recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。
Object.keys(obj)
obj:要返回器枚举自身属性的对象。
返回值:返回一个所有元素为字符串的数组,其元素来自于从给定的obj里可直接枚举的属性。
这些属性的顺序与手动遍历该对象属性时的一致。

以上是对相关知识的介绍下面是代码的实现与分析

javascript">//冻结freezeobj
// const freezeobj = Object.freeze({a:1,b:["a"]});
//在freezeobj内b数组中加入"b"
// freezeobj.b.push("b");
//打印freezeobj返回值{ a: 1, b: [ 'a', 'b' ] }说明当前只冻结了freezeobj对象并没用冻结freezeobj内部对象
// console.log(freezeobj);

//递归方法冻结对象实现方法
//创建一个为freezeobj的函数
const freezeobj = function(obj){
    //冻结当前初始对象
    Object.freeze(obj);
    //调用数组的每个元素,并将元素传递给回调函数。
    Object.keys(obj).forEach( function(key,value){
        //判断返回元素是否有object类型
        if ( typeof obj[key] === 'object' ) {
            //冻结这个对象
            freezeobj( obj[key] );
            //Object.isExtensible(obj);判断一个对象是否是可扩展的返回值为false不可扩展true可扩展
            console.log(Object.isExtensible(obj));
            //尝试在{a:1,b:["a"]}中b数组后加入"a"
            obj.b.push("a");
            //如果冻结成功会打印TypeError: Cannot add property 1, object is not extensible(无法添加属性,obj不能扩展)
            console.log(obj);
        }
    });
};
freezeobj({a:1,b:["a"]});//调用函数并传递实参



http://www.niftyadmin.cn/n/1162450.html

相关文章

斐波那契数列尾递归优化

斐波那契数列(兔子数列) 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家莱昂纳多斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”&…

HTML以及HTML5学习总结

目录 第一章 HTML 1.HTML基础 (1)、什么是HTML (2)、HTML标签 (3)、HTML元素 (4)、 声明 2.HTML的基本标签 3.段落与文字 (1)、段落和文本标签 (2)、网页特殊符号 (3)、自闭合标签 (4)、块元素和行内元素 4.列表 (1)、有序列表 (2)、无序列表 (3)、自定义列表…

JavaScript学习总结

目录 一、JavaScript 简介 1.JavaScript 简介 2.JavaScript 的组成 3.JavaScript 的特性 4.JavaScript 的使用 (1)、标签引用 (2)、文件引用 5.JavaScript 的输出 (1)、页面输出 (2)、控制台输出 (3)、警告框输出 (4)、注释 二、JavaScript语法 1.标识符 (1)、标…

JavaScript高级语法

目录 一、Exception 1.异常概述 2.异常捕捉 3.异常抛出 二、JSON 1.JSON概述 2.JSON数据类型 (1)、JSON字符串 (2)、JSON数字 (3)、JSON对象 (4)、JSON数组 (5)、JSON布尔 (6)、JSON null (7)、JSON字符串转JS对象 (8)、JS对象转JSON字符串 (8)、JSON PHP 三、…

JavaScript新特性(ES6,7,8...)

目录 一、JavaScript新增基础 1.let 关键字 2.const 关键字 3.变量的解构赋值 (1)、数组的解构赋值 (2)、对象的解构赋值 (3)、字符串的解构赋值 (4)、数值和布尔值的解构赋值 (5)、函数参数的解构赋值 (6)、圆括号问题 (7)、用途 4.字符串新增 (1)、字符串的遍历…

Node.js学习总结

目录 一、Node.js 基础 1.Node.js 是什么 2.Node.js 安装 3.Node.js 特性 4.Node.js的简单使用 (1) 、命令终端 (2) 、文件型使用 二、NPM 1.NPM是什么 2.NPM使用 (1)、使用淘宝镜像的命令 (2)、npm 命令安装模块 (3)、全局安装与本地安装 (4)、查看安装信息 (5…

webpack 学习总结

目录 一、Webpack的概述 二、安装 Webpack 三、Webpack的基础使用 1.打包文件 2.CSS打包 3.webpack-dev-server 工具实现自动打包编译功能 4.html-webpack-plugin插件 一、Webpack的概述 Webpack 是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析&a…

前端学习分析

目录 一、前端核心分析 1.概述 2.前端三大核心技术 (1)、结构层(HTML) (2)、表现层(CSS) (3)、行为层(JavaScript) 二、前端发展史 1.UI框架 2.JavaScript构建工具 3.三端同一 4.后端技术 5.主流…