防纂改对象(不可扩展、密封、冻结)简介

2023-11-03 18:32

本文主要是介绍防纂改对象(不可扩展、密封、冻结)简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        JavaScript共享的本质一直是开发人员心头的痛。任何对象都可以被在同一个环境中运行的代码修改。ES5致力于解决这个问题,可以让开发人员定义防纂改对象

对象属性可以通过修改Configurable、Writable、Enumerable、Value、Get、Set等特性,以改变属性的行为。类似ES5增加了几个方法,通过它们可以指定对象的行为。

一、不可扩展对象

默认情况下,所有对象都可扩展,任何时候都可以向对象添加属性和方法。例如:

现在可以使用Object.preventExtensions()方法改变这个行为,让你不能再给对象添加属性和方法。

 虽然不能给对象添加新成员,但已有的成员则丝毫不受影响,你仍然可以修改和删除已有成员。另外,使用Object.istExtensible()方法可以确定对象是否可以扩展。

 

二、密封的对象 

ES5对象定义的第二个保护级别是密封对象。密封对象不可扩展,而且已有成员的Configurable特性将被设置为false。意味着不能删除属性和方法,因为不能使用Object.defineProperty()把数据属性修改为访问器属性,或者相反,属性值是可以修改的。要密封对象,可以使用Object.seal()方法。

在这个例子中age属性的添加和name属性的删除都被忽略。

使用Object.isSealed()可以确定对象是否被密封。因为被密封的对象不可扩展,所以用Object.isExtensible()检测密封的对象也会返回false。

 

三、冻结的对象 

 最严格的防纂改级别是冻结对象。冻结的对象既不可扩展,又是密封,而且对象属性Writable特性会被设置为false。如果定义Set函数,访问器属性仍然是可写的。ES5定义的Object.freeze()方法可以用来冻结对象。

可以用Object.isFrozen()方法用来检测冻结对象。因为冻结对象是既密封又补可扩展,所以用Object.isExtensible()和Object.isSealed()检测冻结对象返回的分别是false和true。 

对于JavaScript库作者而言,冻结对象是非常有用的,防止被人修改了核心库对象。冻结或密封可以防止这些情况发生。 

这篇关于防纂改对象(不可扩展、密封、冻结)简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/340097

相关文章

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

Java常用注解扩展对比举例详解

《Java常用注解扩展对比举例详解》:本文主要介绍Java常用注解扩展对比的相关资料,提供了丰富的代码示例,并总结了最佳实践建议,帮助开发者更好地理解和应用这些注解,需要的朋友可以参考下... 目录一、@Controller 与 @RestController 对比二、使用 @Data 与 不使用 @Dat

Spring组件初始化扩展点BeanPostProcessor的作用详解

《Spring组件初始化扩展点BeanPostProcessor的作用详解》本文通过实战案例和常见应用场景详细介绍了BeanPostProcessor的使用,并强调了其在Spring扩展中的重要性,感... 目录一、概述二、BeanPostProcessor的作用三、核心方法解析1、postProcessB

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

Java实现将byte[]转换为File对象

《Java实现将byte[]转换为File对象》这篇文章将通过一个简单的例子为大家演示Java如何实现byte[]转换为File对象,并将其上传到外部服务器,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言1. 问题背景2. 环境准备3. 实现步骤3.1 从 URL 获取图片字节数据3.2 将字节数组

Javascript访问Promise对象返回值的操作方法

《Javascript访问Promise对象返回值的操作方法》这篇文章介绍了如何在JavaScript中使用Promise对象来处理异步操作,通过使用fetch()方法和Promise对象,我们可以从... 目录在Javascript中,什么是Promise1- then() 链式操作2- 在之后的代码中使