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

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

相关文章

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

java中VO PO DTO POJO BO DO对象的应用场景及使用方式

《java中VOPODTOPOJOBODO对象的应用场景及使用方式》文章介绍了Java开发中常用的几种对象类型及其应用场景,包括VO、PO、DTO、POJO、BO和DO等,并通过示例说明了它... 目录Java中VO PO DTO POJO BO DO对象的应用VO (View Object) - 视图对象

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

Java将时间戳转换为Date对象的方法小结

《Java将时间戳转换为Date对象的方法小结》在Java编程中,处理日期和时间是一个常见需求,特别是在处理网络通信或者数据库操作时,本文主要为大家整理了Java中将时间戳转换为Date对象的方法... 目录1. 理解时间戳2. Date 类的构造函数3. 转换示例4. 处理可能的异常5. 考虑时区问题6.

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl